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

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

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

获取一年中第一个星期一

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

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

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

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

javascript 复制代码
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]
}

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

javascript 复制代码
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]
}

获取一年中的周数

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

获取某年某周的日期区间

javascript 复制代码
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]
}

转换日期类型为指定格式

javascript 复制代码
/**
 * @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
}

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

javascript 复制代码
/**
 * @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
}

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

javascript 复制代码
function isFutureDate(date) {
    let today = new Date()
    let nowTime = today.getTime()
    let dateTime = date.getTime()
    return dateTime > nowTime
}
相关推荐
web守墓人1 小时前
【前端】ikun-markdown: 纯js实现markdown到富文本html的转换库
前端·javascript·html
Savior`L1 小时前
CSS知识复习5
前端·css
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
中微子5 小时前
🔥 React Context 面试必考!从源码到实战的完整攻略 | 99%的人都不知道的性能陷阱
前端·react.js
秋田君6 小时前
深入理解JavaScript设计模式之命令模式
javascript·设计模式·命令模式
中微子6 小时前
React 状态管理 源码深度解析
前端·react.js
风吹落叶花飘荡7 小时前
2025 Next.js项目提前编译并在服务器
服务器·开发语言·javascript
加减法原则7 小时前
Vue3 组合式函数:让你的代码复用如丝般顺滑
前端·vue.js
yanlele8 小时前
我用爬虫抓取了 25 年 6 月掘金热门面试文章
前端·javascript·面试
lichenyang4538 小时前
React移动端开发项目优化
前端·react.js·前端框架