当前位置: 代码网 > it编程>编程语言>Javascript > JS日期转化指定格式及获取月/周日期区间的方法

JS日期转化指定格式及获取月/周日期区间的方法

2024年10月28日 Javascript 我要评论
js日期转化指定格式,获取月/周日期区间该篇文章主要用于收录js对date类型的处理,包括但不限于转化指定格式、获取各种月/周的日期区间等等获取一年中第一个星期一function getfirstmo

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 += 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
}

到此这篇关于js日期转化指定格式,获取月/周日期区间的文章就介绍到这了,更多相关js日期转化指定格式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com