当前位置: 首页 > news >正文

JS日期转化指定格式,获取月/周日期区间

JS日期转化指定格式,获取月/周日期区间

该篇文章主要用于收录JS对Date类型的处理,包括但不限于转化指定格式、获取各种月/周的日期区间等等

获取一年中第一个星期一

function getFirstMondayOfYear(year) {let date = new Date(year, 0, 1) // 1月1日while (date.getDay() !== 1) { // 找到第一个星期一date.setDate(date.getDate() + 1)}return date
}

获取一年中最后一个星期一

function getLastMondayOfYear(year) {let date = new Date(year, 11, 31) // 12月31日while (date.getDay() !== 1) { // 找到第一个星期一date.setDate(date.getDate() - 1)}return date
}

获取当天所在周的周一与周日对应的日期区间

function getCurrentWeekRange(today) {let dayOfWeek = today.getDay()let startOfWeek = new Date(today)startOfWeek.setDate(today.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1))let endOfWeek = new Date(today)endOfWeek.setDate(startOfWeek.getDate() + 6)return [startOfWeek, endOfWeek]
}

获取当天所在月的月初与月末对应的日期区间

function getCurrentMonthRange(today) {let firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1)let lastDayOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0)return [firstDayOfMonth, lastDayOfMonth]
}

获取一年中的周数

function getWeeksInYear(year) {let firstMonday = getFirstMondayOfYear(year)let lastMonday = getLastMondayOfYear(year)let weeks = Math.floor((lastMonday - firstMonday) / 86400000 / 7) + 1 // 计算周数return weeks
}

获取某年某周的日期区间

function getWeekRange(year, weekNumber) {let firstMonday = getFirstMondayOfYear(year)let start = new Date(firstMonday)start.setDate(start.getDate() + 7 * (weekNumber - 1))let end = new Date(start)end.setDate(end.getDate() + 6)return [start, end]
}

转换日期类型为指定格式

/*** @Description: 转换日期类型为指定格式* @param date: String | Date, 日期(String需支持转换Date)* @param format: String, 格式示例(以一年中的一月一日作为示例)* @return String(目前支持年月日/年月/月日)**/
function getFormatDate(date, format) {const currentDate = new Date(date)let formatDate = ''let isYear = true // 示例是否包含年份let formatArray = [] // 拆解示例文本中的各部分let part = ''for(let i of format) {if(!isNaN(i)) part += ielse {formatArray.push(part)formatArray.push(i)part = ''}}if(part) formatArray.push(part)formatArray.forEach((item, index) => {let partText = ''// 第一个数字可能为年份或者月份if(index === 0) {if(item.length > 2) partText = currentDate.getFullYear()if(item.length === 2) {partText = (currentDate.getMonth() + 1).toString().padStart(2, '0')isYear = false}if(item.length < 2) {partText = currentDate.getMonth() + 1isYear = false}}// 第二个数字可能为月份或天数else if(index === 2) {if(item.length === 2 && isYear) partText = (currentDate.getMonth() + 1).toString().padStart(2, '0')if(item.length < 2 && isYear) partText = currentDate.getMonth() + 1if(item.length === 2 && !isYear) partText = currentDate.getDate().toString().padStart(2, '0')if(item.length < 2 && !isYear) partText = currentDate.getDate()}// 第三个数字为天数else if(index === 4) {if(item.length === 2) partText = currentDate.getDate().toString().padStart(2, '0')if(item.length < 2) partText = currentDate.getDate()}else partText = itemformatDate += partText})return formatDate
}

获取某一年中每一周的日期区间的数组集合

/*** @Description: 获取某一年中每一周的日期区间的数组集合* @param year: number, 年份* @return Array**/
function getWeeks(year) {let weeksInYear = getWeeksInYear(year) // 计算一年中的周数let data = []while(weeksInYear !== 0) {let weekRange = getWeekRange(year, weeksInYear)let start = getFormatDate(weekRange.start, '01-01')let end = getFormatDate(weekRange.end, '01-01')let string = start + '~' + end + '(第' + weeksInYear + '周)'weeksInYear--data.unshift(string)}return data
}

判断日期是否为未来的日期

function isFutureDate(date) {let today = new Date()let nowTime = today.getTime()let dateTime = date.getTime()return dateTime > nowTime
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot入门:构建你的首个Spring Boot应用
  • Laya2.x出包alipay小游戏
  • 数据恢复免费版工具大比拼,哪款才是你的“救星”?
  • Linux运维篇-tigervnc工具的使用
  • 机器学习特征-学习篇
  • rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链
  • Maven下载安装
  • 物联网之Arduino编程语言、条件语句、循环语句、变量、数组、函数
  • IP协议及相关特性
  • WMS仓储系统的真正价值:从混乱到有序,亿发WMS如何重塑仓库管理
  • 算法:双指针题目练习
  • while循环及简单案例
  • Dubbo与SpringCloud的区别和优缺点
  • 1.熟悉接口测试(Postman工具)
  • 在Windows 7上安装Redis
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017前端实习生面试总结
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 3.7、@ResponseBody 和 @RestController
  • CSS中外联样式表代表的含义
  • flask接收请求并推入栈
  • Linux链接文件
  • Node + FFmpeg 实现Canvas动画导出视频
  • Odoo domain写法及运用
  • React-Native - 收藏集 - 掘金
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 程序员最讨厌的9句话,你可有补充?
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 技术发展面试
  • 漂亮刷新控件-iOS
  • 悄悄地说一个bug
  • 巧用 TypeScript (一)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​​​​​​​​​​​​​​Γ函数
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (55)MOS管专题--->(10)MOS管的封装
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C++哈希表01)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)PySpark3:SparkSQL编程
  • (分布式缓存)Redis分片集群
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)SpringBoot3---尚硅谷总结
  • (转)为C# Windows服务添加安装程序
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ***通过什么方式***网吧