JS自定义计算任意时间为当年的第几周

2024-08-23 14:38

本文主要是介绍JS自定义计算任意时间为当年的第几周,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JS自定义计算任意时间为当年的第几周

特点:

1.通过startType参数可以定义每周的开始是周一还是周天

2.通过addZero可以定义不足一周按照去年最后一周计算还是第一周

先看结果:

 上代码:

        var d = new Date();d.setFullYear(2022);d.setMonth(0);d.setDate(4);console.log(getWeekNum(d));//获取当天为那年那周function getWeekNum(date) {var nowDate = date; //保存传入的日期var startType = 1; //开始类型  0为周天开始,1为周一开始var addZero = 0; //是否补充0    0不满足1周按去年最后一周算,1不满足1周按第一周算var firstDayDate = getWeekDate(nowDate.getFullYear(), startType);var diffDay = Math.ceil((nowDate.getTime() - firstDayDate.getTime()) / 1000 / 3600 / 24 / 7) + addZero;if (diffDay > 0) { //如果不为0 则返回return firstDayDate.getFullYear() + "年" + diffDay + "周";} else { //如果为0 则计算去年最后一周var lastYearDate = getWeekDate(nowDate.getFullYear() - 1, startType); //获取上年第一个周日(周一)的日期var endYearDate = new Date(nowDate.getFullYear() - 1 + "-12-31");var lastYearDiffDay = Math.ceil((endYearDate.getTime() - lastYearDate.getTime()) / 1000 / 3600 / 24 / 7) +addZero;return lastYearDate.getFullYear() + "年" + lastYearDiffDay + "周";}}//用于获取某年第一个周日(周一)的日期function getWeekDate(year, startType) {var firstDayDate = new Date(year + "-01-01");var firstWeed = firstDayDate.getDay(); //获取当年第一天是周几var dayNum = 0;if (startType == 0) {//按照周天开始dayNum = 7 - ((firstWeed == 0) ? 7 : firstWeed);} else if (startType == 1) {//按照周一开始dayNum = 8 - ((firstWeed == 0) ? 7 : (firstWeed == 1 ? 8 : firstWeed));}firstDayDate.setDate(firstDayDate.getDate() + dayNum);console.log(firstDayDate.getFullYear() + "年第一天为:周" + firstWeed + "(0为周天),距离第一个周日(周一)" + dayNum + "天,日期:1月" +firstDayDate.getDate() + "号");return firstDayDate;}//时间格式化function dateFormat(fmt, date) {let ret;const opt = {"Y+": date.getFullYear().toString(), // 年"m+": (date.getMonth() + 1).toString(), // 月"d+": date.getDate().toString(), // 日"H+": date.getHours().toString(), // 时"M+": date.getMinutes().toString(), // 分"S+": date.getSeconds().toString() // 秒};for (let k in opt) {ret = new RegExp("(" + k + ")").exec(fmt);if (ret) {fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))};};return fmt;}

这篇关于JS自定义计算任意时间为当年的第几周的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099663

相关文章

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3