Javascript 计算一年中的第几周 从几号开始到几号结束

需求介绍
给一个年份和第几周,计算出这周是从几号到几号
规则
一年分为54周,第一周是1月1日到第一个周日,第二周是今年的第一个周一往后推一周,以此类推,第53周的时候如果没到12月31日,则该年度有54周,反之有53周,到12月31日不管是不是周末,都截止到最后一周的结束日期
代码详解

    //时间戳转年月日  参数是秒的时间戳 函数返回一个对象 对象里有年 月 日
    function yearDay(long){
        var time = new Date(long * 1000)
        var year = time.getFullYear();
        var month = (time.getMonth()+1) < 10 ? '0' + (time.getMonth()+1) : (time.getMonth()+1);
        var date = time.getDate() < 10 ? '0' + time.getDate() : time.getDate() ;
        var yearday = {year,month,date}
        return yearday
    }
    //计算一年中的每一周都是从几号到几号
    //第一周为1月1日到 本年的 第一个周日
    //第二周为 本年的 第一个周一 往后推到周日
    //以此类推 再往后推52周。。。
    //如果最后一周在12月31日之前,则本年有垮了54周,反之53周
    //12月31 日不论是周几,都算为本周的最后一天
    //参数年份 ,函数返回一个数组,数组里的对象包含 这一周的开始日期和结束日期
function whichWeek(year){
    var d = new Date(year, 0, 1);
    while (d.getDay() != 1) {
        d.setDate(d.getDate() + 1);
    }
    let arr = []
    let longnum = d.setDate(d.getDate())
    if(longnum > +new Date(year, 0, 1)){
        let obj = yearDay(+new Date(year, 0, 1) / 1000)
        obj.last = yearDay( longnum / 1000 - 86400)
        arr.push(obj)
    }
    let oneitem = yearDay(longnum / 1000)
    oneitem.last = yearDay( longnum / 1000 + 86400 * 6)
    arr.push(oneitem)
    var lastStr
    for(var i = 0 ; i<51 ;i++){
        let long = d.setDate(d.getDate() + 7)
        let obj = yearDay( long / 1000)
        obj.last = yearDay( long / 1000 + 86400 * 6)
        lastStr = long + 86400000 * 6
        arr.push(obj)
    }
    if(lastStr < +new Date(year + 1, 0, 1)){        
        let obj = yearDay(lastStr / 1000 + 86400)
        obj.last = yearDay(+new Date(year + 1, 0, 1) / 1000 - 86400)
        arr.push(obj)
    }else{
        arr[arr.length-1].last = yearDay(+new Date(year + 1, 0, 1) / 1000 - 86400)
    }
    return arr
}
//例如 2012 年就跨了54周,也有很多是53周的
let week2012 = whichWeek(2012)
console.log(week2012)
//调用完得到的是一个数组见下图

在这里插入图片描述
然后需要哪一周的起始时间,直接用索引在数组里取就好了

javascript

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值