前端 获取时间范围内的所有周数组集合,第一项为首月的首个周一

news2024/11/27 9:39:03

具体可实现的效果例如:

数据格式:

具体代码实现:

     /**
       * 获取当前日期的第一个周一是哪天
       * @params date - 'YYYY-MM'
       */
      function getMonthFirstWeekDay(date) {
        let year = new Date(date).getFullYear();
        let month = new Date(date).getMonth();
        for (let week = 1; week < 8; week++) {
          if (new Date(`${year}-${month + 1}-${week}`).getDay() === 1) {
            return week;
          }
        }
      }

      /**
       * 获取start日期到end日期的周集合
       * @params start - 'YYYY-MM'
       * @params end - 'YYYY-MM'
       */
      function getAllWeeks(start, end) {
        if (!start) return [];

        // 结束日期
        try {
          let endDate = end ? new Date(end) : new Date();
          let endYear = endDate.getFullYear();
          let endMonth = endDate.getMonth() + 2;
          if (endMonth > 11) {
            endMonth = "1";
            endYear++;
          }
          end = `${endYear}-${endMonth}`;

          const weeks = []; // 周数组
          let firstWeek = getMonthFirstWeekDay(start); // 周几
          let firstDate = `${start}-${firstWeek}`; // 第一周日期
          let endTimestamp = new Date(end).getTime(); // 不超过最后月份时间戳
          let prevTimestamp = new Date(firstDate).getTime(); // 第一周时间戳
          let oneDay = 24 * 60 * 60 * 1000; // 一天的时间戳偏移量

          while (prevTimestamp < endTimestamp) {
            let prevDate = new Date(prevTimestamp);
            let nextDate = new Date(prevTimestamp + oneDay * 6);

            let prevY = prevDate.getFullYear();
            let prevM = prevDate.getMonth() + 1;
            let prevD = prevDate.getDate();

            let nextY = nextDate.getFullYear();
            let nextM = nextDate.getMonth() + 1;
            let nextD = nextDate.getDate();

            weeks.push([
              {
                year: prevY,
                month: prevM,
                day: prevD,
                ymd: `${prevY}-${prevM}-${prevD}`,
                ym: `${prevY}-${prevM}`,
                md: `${prevM}-${prevD}`,
              },
              {
                year: nextY,
                month: nextM,
                day: nextD,
                ymd: `${nextY}-${nextM}-${nextD}`,
                ym: `${nextY}-${nextM}`,
                md: `${nextM}-${nextD}`,
              },
            ]);

            prevTimestamp += oneDay * 7;
          }

          return weeks;
        } catch (error) {
          return [];
        }
      }

      // 使用示例

      // 全部周
      const weeks = getAllWeeks("2023-12", "2024-01");
      console.log("weeks:", weeks);

      // 按月分组
      const weeksByMonth = Object.groupBy(weeks, (op) => op[0].ym);
      console.log("weeksByMonth:", weeksByMonth);

      // 按年分组
      const weeksByYear = Object.groupBy(weeks, (op) => op[0].year);
      console.log("weeksByYear:", weeksByYear);

需求简要描述一下吧

就是获取某个时间范围内,生成月报周报,第一个周报为时间范围当月的第一周,跨周则依然归属于当月,跨周的下个周一才归属下个月。生成这样的周报月报下拉选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux:有关目录、链接文件的函数 Makefil、gdb的使用

目录函数 1.getpwuid struct passwd *getpwuid(uid_t uid); 功能: 根据用户id到/etc/passwd文件下解析获得 结构体信息 参数:uid:用户id 返回值: 成功返回id对应用户的信息 失败返回NULL passwd 结构体的定义通常如下所示 struct passwd { char *pw_nam…

opencv-特征检测

1&#xff0c;Harris角点检测 如果粉色窗口向四周移动&#xff0c;窗口内的像素没有变化则认定为平坦区域&#xff0c;如果窗口向上移动无明显变化&#xff0c;而左右移动有变化则认定为边缘&#xff0c;如果窗口向任意方向移动均有明显变化则为角点&#xff0c;如下图 dst不是…

MSSQL暴力破解

一、基本信息 靶机&#xff1a;IP&#xff1a;192.168.100.70 二、攻击过程 方法一&#xff1a;msfconsole 启动 msfconsole msfconsole 选用攻击模块&#xff0c;并设置参数 use auxiliary/scanner/mssql/mssql_login set rhosts 192.168.100.70 set USER_FILE /userna…

探舟数字与周村古商城景区携手签署AI导游导览合作协议

导语&#xff1a; 近日&#xff0c;国内领先的科技公司广州探舟数字科技有限公司&#xff08;以下简称探舟数字&#xff09;与国家5A级景区创建单位、国家级夜间文化和旅游消费集聚区山东周村古商城正式签署合作协议&#xff0c;共同推进AI导游导览系统的全面应用。此次合作标…

【Java数据结构】---List(ArrayList)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 前言线性表顺序表&#x…

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…

TinyGPT-V:微型视觉语言模型【VLM】

AI技术正在不断融入我们的日常生活。人工智能的一个应用包括多模态化&#xff0c;例如将语言与视觉模型相结合。这些视觉语言模型可以应用于视频字幕、语义搜索等任务。 本周&#xff0c;我将重点介绍一种名为 TinyGPT-V&#xff08;Arxiv | GitHub&#xff09;的最新视觉语言…

QT:Telnet客户端与服务器的创建

客户端 telnetClient类 #ifndef TELNETCLIENT_H #define TELNETCLIENT_H#include <QObject> #include <QTcpSocket>class TelnetClient : public QObject {Q_OBJECTpublic:explicit TelnetClient(QObject *parent nullptr);~TelnetClient();// 连接到指定的主机…

智慧节能节水设备远程监控解决方案

智慧节能节水设备远程监控解决方案&#xff0c;作为现代物联网技术与环保理念深度融合的产物&#xff0c;旨在通过高度集成的传感器网络、大数据分析及云计算平台&#xff0c;实现对各类节能节水设施的精细化管理和实时监控&#xff0c;从而大幅度提升资源利用效率&#xff0c;…

eNSP 华为三层交换机实现VLAN间通信

华为三层交换机实现VLAN间通信 三层交换机&#xff1a; <Huawei>sys [Huawei]sys SW-3 [SW-3]vlan batch 10 20 [SW-3]int vlan 10 [SW-3-Vlanif10]ip address 192.168.10.254 24 [SW-3-Vlanif10]int vlan 20 [SW-3-Vlanif20]ip add 192.168.20.254 24 [SW-3-Vlanif20]in…

Qt登录窗口设计

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…

专业名词理解(一):鲁棒性和泛化能力

目录 前言 一、鲁棒性&#xff08;Robustness&#xff09; 二、泛化能力&#xff08;Generalization&#xff09; 总结 前言 鲁棒性&#xff08;Robustness&#xff09;和泛化能力&#xff08;Generalization&#xff09;是机器学习和人工智能模型的重要特性&#xff0c;它…

CDD数据库文件制作(四)——服务配置(0x11)

目录 1.子功能创建2.会话切换配置2.1.根据诊断调查表进行信息提取(0x1101)2.2.会话转换配置(0x1101)2.3.根据诊断调查表进行信息提取(0x1102)2.4.会话转换配置(0x1102)2.5.根据诊断调查表进行信息提取(0x1103)2.6.会话转换配置(0x1103)2.7.会话切换配置完成后效果图…

R9 9900X R9 9950X评测:看完觉得7800X3D更香了

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; R9 9900X R9 9950X评测&#xff1a;能效提升&#xff0c;温度下降 R9 9900X R9 9950X基础规格 注&#xff1a;评测信息来自外媒Wccftech 老规矩&#xff0c;先介绍一下这两款锐龙9000旗舰CPU的…

【笔记1-7】Qt bug记录:error C2371: QStringList重定义;不同的基类型,Qt6无法使用QStringList

在Qt5工程升级到Qt6的过程中&#xff0c;出现了QStringList重定义的问题 一开始尝试在其他文件中使用QStringList&#xff0c;结果是Qt5.9.4版本怎么使用都没有问题&#xff0c;而Qt6.7.2在其他文件中写同样的代码也会有问题 通过调查Qt源码&#xff0c;发现是Qt6对qcontainer…

栈与计算—— 150、227、224※

150. 逆波兰表达式求值&#xff08;中等&#xff09; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&a…

web前端之实现一只可爱的小杰尼乌龟、伪元素、动画

MENU 前言效果图htmlstyle 前言 代码段使用HTML和CSS创建一个“杰尼龟”的动画。 效果图 html <div class"squirtle"><div class"tail"></div><div class"body"><div class"stomach"></div><d…

了解数据库中常用存储引擎数据结构(1)

目录 引言 存储引擎和存储结构 两者的关系 存储结构 分类 1. 按数据组织方式分类 2. 按索引结构分类 3. 按存储介质分类 4. 按数据分布方式分类 5. 按数据冗余和备份分类 存储结构需要的特性 BTree 补充知识&#xff1a;Lock和Latch的区别&#xff08;存储引擎并发…

干货分享|如何使用Stable Diffusion快速打造瞬息全宇宙?

Deforum也是一款文生视频插件&#xff0c;它把提示词跃迁和运镜结合到一起&#xff0c;生成的视频让人仿佛穿越不同时空&#xff0c;因此又被称作瞬息全宇宙。本节将介绍使用Deforum生成视频的方法。 在使用Deforum时&#xff0c;由于设置参数非常多&#xff0c;初次使用时很难…

【C语言篇】编译和链接以及预处理介绍(下篇)

文章目录 前言#和###运算符##运算符 命名约定#undef命令⾏定义条件编译#if和#endif多个分支的条件编译判断是否被定义嵌套指令 头文件被包含头文件被包含的方式本地文件包含库文件的包含 嵌套文件包含 其他预处理指令 写在最后 前言 本篇接前一篇【C语言篇】编译和链接以及预处…