本文汇总了JavaScript中处理Date对象的常用方法,包括将日期转换为指定格式,以及计算一年中首尾星期一、当前周与月的日期区间、全年周数及特定周区间等功能。通过封装多个工具函数,帮助开发者高效解决日常开发中的日期计算需求,代码可直接复用。
JavaScript日期格式转换与月/周区间计算
本文旨在整理JavaScript中对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 += i
else {
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() + 1
isYear = 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() + 1
if(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 = item
formatDate += 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
}以上就是关于JavaScript日期格式转换及月/周区间计算的相关介绍,如需了解更多JS日期处理技巧,可查阅本站往期文章或继续浏览下文。感谢支持!