需求来源:后端返回所有时间数组和数值数组,前端按天、周、月进行统计用于图表的展示。

实现效果如下:原始数据是两个数组,date数组存放日期,value数组存放日期对应的数值,经过按周分组和按月分组输出week和month(2020-02-27是周四,2020-03-02是周一,2020-03-09也是周一,符合要求)

封装了两个方法,代码如下:groupByWeek和groupByMonth,输入值均为date-日期数组和value-值数组

const date = ["2020-02-27","2020-02-28","2020-02-29","2020-03-01", "2020-03-02", "2020-03-03", "2020-03-04", "2020-03-05", "2020-03-06", "2020-03-07", "2020-03-08", "2020-03-09", "2020-03-10", "2020-03-11", "2020-03-12", "2020-03-13", "2020-03-14", "2020-03-15", "2020-03-16", "2020-03-17", "2020-03-18", "2020-03-19", "2020-03-20", "2020-03-21"];const value = [0,0,0,3, 2, 2, 6, 5, 3, 5, 4, 8, 5, 8, 9, 9, 0,4,6,7,8,1,2,3];console.log({date});console.log({value});const week = groupByWeek(date, value);const month = groupByMonth(date, value);console.log({week});console.log({month});// 按周分组function groupByWeek(date, value) {const weekDay = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];const weekDate = [];let newDate = [];let newValue = [];/*遍历,把所有日期转为星期X*/date.forEach((item) => {const myDate = new Date(Date.parse(item));weekDate.push(weekDay[myDate.getDay()]);});/*从前往后找第一个“星期日”,返回下标*/const index = weekDate.findIndex((value)=>{return value=="星期日";});if(index >= 0){ //日期数组内可以找到"星期日"/*以周为单位开始分组*/// 第一个周为一个数组,其他的按7天开始分组const date1 = date.slice(0,index+1);const date2 = date.slice(index+1,date.length);const value1 = value.slice(0,index+1);const value2 = value.slice(index+1,value.length);newDate.push(date1[0]);newValue.push(eval(value1.join("+")));const result = dataGroupFunc(date2, value2, 7);newDate = newDate.concat(result.newArr1);newValue = newValue.concat(result.newArr2);} else { //日期数组内找不到"星期日"newDate = date;newValue = [eval(value.join("+"))];}return {newDate: newDate,newValue:newValue};// 图表数据分组方法:arr1-图表横坐标,arr2-图表纵坐标数据,group-以几条数据为一组function dataGroupFunc(arr1, arr2, group) {const newArr1 = [];const newArr2 = [];for(let i = 0; i < arr1.length;) {newArr1.push(arr1[i]);let count = 0;for (let j = i; j < i+group; j++) {if (arr2[j]){count += arr2[j];}}newArr2.push(count);i+=group;}return {newArr1: newArr1,newArr2: newArr2}}}// 按月分组function groupByMonth(date, value) {const newDate = [];const newValue = [];const newDate1 = [];const newValue1 = [];const monthArr = [];const indexArr = [];/*遍历,把所有日期的月份取出*/date.forEach((item) => {item.split('-');monthArr.push(item.split('-')[1]);});group(monthArr, 0 , 0);/*根据分好组的下标信息开始截取原始数组*/indexArr.forEach((item) => {newDate1.push(date.slice(item[0],item[item.length-1]+1));newValue1.push(value.slice(item[0],item[item.length-1]+1));});/*把每个分组的第一项拿出用于图表横坐标的值*/newDate1.forEach((item) => {newDate.push(item[0]);});/*计算纵坐标的和值*/newValue1.forEach((item) => {newValue.push(eval(item.join("+")));});return {newDate: newDate,newValue: newValue};//数组相同项合一组记录下标function group(arr, index, index1) {if (index < arr.length) {indexArr[index1] = [index];for(let i=index+1; i<arr.length; i++){if (arr[i] == arr[index]){indexArr[index1].push(i);} else {group(arr, i, index1+1);break;}}}}}

日期数据数组按实际周和实际月进行分组相关推荐

  1. mysql日期格式化季度_Mysql按周,按月,按日,按小时分组统计数据

    按周 select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; 按月 ...

  2. 股票几个指数周收益率和月收益率的计算

    在金融数据挖掘分析中经常会遇到不同时间维度的分析.本案例主要目的是介绍如何通过交易日历表和日交易数据,转化为统计的周交易数据和月交易数据,并实现周收益率和月收益率的计算.在本案例中,我们介绍了利用交易 ...

  3. MySql按周,按月,按日分组统计数据、日期计算。并统计环比、同比

    MySql按周,按月,按日分组统计数据 <!-- 按日查询 --> SELECT DATE_FORMAT(created_date,'%Y-%m-%d') as time,sum(mone ...

  4. C标准函数库中获取时间与日期、对时间与日期数据操作及格式化

    表示时间的三种数据类型[编辑] 日历时间(calendar time),是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整.开始计时的标准时间点,各种编译器一般使用19 ...

  5. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?

    摘要: 下文讲述MySQL数据库中获取指定日期对应的本年的周数信息的方法分享,如下所示: 实现思路: 采用week系统函数即可获取指定日期在日期所在年度的周数信息 week系统函数语法说明: week ...

  6. excel解决日期数据无法正常筛选

    为什么日期数据无法正常筛选 提问:为什么日期数据无法正常筛选? 说明:筛选日期数据时,找不到按日期筛选的选项,比如按月.按周筛选等. 无法正常筛选的日期数据,如下图所示. 目标效果为: 解决 解决方案 ...

  7. 电商销售数据分析与预测(日期数据统计、按天统计、按月统计)

    本文来自<Python数据分析从入门到精通>--明日科技编著 随着电商行业的激烈竞争,电商平台推出了各种数字营销方案,付费广告也是花样繁多.那么电商投入广告后,究竟能给企业增加多少收益,对 ...

  8. Pandas处理日期数据的常见操作集锦

    Pandas处理日期数据的常见操作集锦 数据读取及整理 获取某个日期之前/后或时间区间的数据 python 获取当前时间及前一天时间 pandas的日期时间间隔运算选取指定时间范围内/外的数据 利用p ...

  9. pandas——数据移位、数据转换、数据合并、数据导出和日期数据的处理,时间序列等

    pandas统计分析(下) 本文主要介绍使用pandas进行数据移位.数据转换.数据合并.数据导出和日期数据的处理,时间序列等. 数据移位 数据移位就是在分析数据时,需要移动到上一条,在pandas中 ...

最新文章

  1. ActiveMQ组件使用方法
  2. java 更新文件内容吗_java Io流更新文件内容
  3. Linux网络编程——浅谈 TCP 三次握手和四次挥手
  4. 在java中重写方法应遵循规则的包括_Java面试题集合篇二
  5. caffe源码分析:softmax_layer.cpp softmax_loss_layer.cpp
  6. mongo-connector导入数据到Elasticsearch
  7. 个人中心的html,个人中心.html
  8. oracle 中此处列不允许,oracle-序列 ora-02287 此处不允许序号
  9. php处理文件属性函数,文件属性 · PHP文件系统操作常用函数整理 · 看云
  10. 机器学习部分内容总结
  11. [PyTorch] 保存模型和恢复模型
  12. RichContentLabel使用注意
  13. activeMq安装及原理分析
  14. 程序员996与工地施工人员谁更累?
  15. cad多段线画圆弧方向_【学员分享】CAD多段线用法
  16. 电脑IE图标删不掉怎么办
  17. 几张图片演示PD(PowerDesigner)生成数据库脚本sql文件
  18. 多个约束的lagrange multiplier证明.
  19. android 怎么调用震动,Android实现调用震动的方法
  20. 鸿蒙系统微信怎么操作,鸿蒙系统无微信?为何腾讯如此恶心

热门文章

  1. IT招聘网站(程序员跳槽指南) 1
  2. steam你画我猜中文版
  3. SideBySide (SxS) 错误
  4. 在线html过滤,在线Html编辑器粘贴过滤技术详解(二)
  5. 软件测试面试(名企摸底:阿里,腾讯,360)
  6. day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...
  7. 电子合同将取代纸质合同吗?
  8. 智慧路灯存在的隐患缺陷问题有哪些?解决智慧路灯隐患处理措施!
  9. 三菱fx3U插补画圆,仅提供plc程序。 程序已详细注释
  10. OpenSource