算出指定日期在当年的第几周

假定我们是按周一算一周开始。

基本计算应该是算出指定日期在当年的第几天,然后算出这些天换算成周,除以7,向下取整+1

比如 当周7号,7-1 = 6 ,6/7=0 余 6

这里涉及到的就是开始日期和结束日期,这样才能算出日期差。

但如果当年元旦并非周一,那上面的结论就不行了,至少第七天已经是第二周了。那就起始日期再往前,找到元旦那一周的周一,算出结束日期到起始日期的天数除以7

这样梳理一下就是:

输入:日期

得出:日期所在的元旦的日期和星期,算出当周的周一

计算:日期-周一得到天数,Math.floor(天数/7)+1


function getMondayDate(date){
  const currentDay = date.getDay();
  const target = new Date(date);
  if(currentDay===0){
    target.setDate(target.getDate()-6)
  }else{
    target.setDate(target.getDate()+1-currentDay)
  }
  return target;
}

function getFirstDate(date){
  const year = date.getFullYear();
  const target = new Date(year, 0, 1)
  return target
}

function getWeekNo(date){
  const firstWeekMonday = getMondayDate(getFirstDate(date))
  const timeDiff = date.getTime() - firstWeekMonday.getTime();
  const days = Math.floor(timeDiff/1000/60/60/24);
  return Math.floor(days/7)+1
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值