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

相关文章

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my