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

相关文章

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

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法