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

相关文章

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

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

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

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

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py