根据年份获取具体的周区间

这里的例子是计算一年的周区间,得到这一年的起始时间遍历放入新数组中

function naturalWeek( year ) {
  var weeks = {}
  var eachWeek = []
  var index = 1
  var yearStr = new Date( year.toString() + '/1/1' ).valueOf()
  var yearEnd = new Date( (Number(year)+1).toString() + '/1/1' ).valueOf() - 1
  for ( var i=yearStr; i<yearEnd; i+=86400000 ) {
    var date = new Date(i).toLocaleDateString()
    var day = new Date(i).getDay()
    eachWeek.push( date )
    weeks[index] = eachWeek
    if ( day === 0 ) {
      index += 1
      eachWeek = []
    }
  }
  return weeks
}

传参调用
naturalWeek( 2020 )

下面是打印的结果:


 

第二种方法:

//通过年份、周数获取日期范围   year 年   weeks 周  getWeekRange(2019,12))--> 2019-03-18~2019-03-24

function getWeekRange(year, weekNum) {

  const yearStart = new Date(parseInt(year), 0, 1), //设置该年1.1.

    firstDay = yearStart.getDay(); // 星期

  // 对1.1.所在周的前后几天特殊处理.

  const other = firstDay >= 0 && firstDay <= 4 ? firstDay - 1 : firstDay - 8;

  //时间调整,得出要计算周的起/始时间.

  // 考虑距离当年1.1.的总天数

  let days = (parseInt(weekNum, 10) - 1) * 7 - other;

  // 一天时间的毫秒数

  let oneDay = 24 * 60 * 60 * 1000;

  // 当前周 第一天 离1/1/70的毫秒数.

  let dateInMs = oneDay * days + yearStart.getTime();

  //日期调整(设置1/1/70至今的毫秒数)

  const weekStart = new Date(dateInMs);

  //当前所选周最后一天处理,同上.

  let dateInMsE = oneDay * 6 + dateInMs;

  const weekEnd = new Date(dateInMsE);

  let weekdays = [];

  for (let i = 0; i < 7; i++) {

    let n = i;

    let weekd = oneDay * n + dateInMs;

    let weekDate = new Date(weekd);

    let m = weekDate.getMonth() + 1;

    m = m < 10 ? "0" + m : m;

    let d = weekDate.getDate();

    d = d < 10 ? "0" + d : d;

    weekdays.push(m +'.' + d);

  }

//下面的weekdays是拿到的这一周所有的日期    12.01这样的格式

console.log(weekdays);

  //月和日的处理,一位变两位,如:1->01.

  let month = weekStart.getMonth() + 1;

  month = month < 10 ? "0" + month : month;

  let day = weekStart.getDate();

  day = day < 10 ? "0" + day : day;

  let monthE = weekEnd.getMonth() + 1;

  monthE = monthE < 10 ? "0" + monthE : monthE;

  let dayE = weekEnd.getDate();

  dayE = dayE < 10 ? "0" + dayE : dayE;

  return [month + "月" + day + "日-" + (monthE + "月" + dayE + "日"),weekdays];

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈子米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值