如何在JS中获取给定周数的日期范围

时间:2017-03-06 17:47:16

标签: javascript date reactjs momentjs

如果那个星期恰好是连续两个月,我需要知道一周的确切月份。例如,2016年第52周是2016年12月和2017年1月。2017年1月30日至2017年2月5日,2017年第5周开始。

因此,如果给出一年中的一周数,我可以得到它所涉及的月份。我需要知道是否有任何JS库可以轻松实现这一目标。

我知道我可以从特定的日期值获得一个星期的数字,但是还没有找到一种方法来获取日期范围内的日期范围,以便我可以从那里获得月份 .If momentJS或任何其他lib都可以做到这一点,我怎样才能用它来实现这个目标?

提前致谢

2 个答案:

答案 0 :(得分:3)

我们想要为给定周和结束的开头创建一个日期对象。

momentjs是一个很好的库,可以更轻松地使用日期对象。

var moment = require('moment');

function getMonths(weekNumber) {
  var beginningOfWeek = moment().week(weekNumber).startOf('week');
  var endOfWeek = moment().week(weekNumber).startOf('week').add(6, 'days');
  console.log(beginningOfWeek.format('MMMM'));
  console.log(endOfWeek.format('MMMM'));
}

考虑到一周的数字,我们正在创建一个时刻对象,并在六天后创建另一个。然后我们在一周的开始和结束时记录月份。

以下是一个例子:

getMonths(5);
  

一月

     

二月

答案 1 :(得分:2)

您可以通过添加更多6天轻松获得周结束日期



function getDateOfISOWeek(w, y) {
        var simple = new Date(y, 0, 1 + (w - 1) * 7);
        var dow = simple.getDay();
        var ISOweekStart = simple;
        if (dow <= 4)
            ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
        else
            ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
        return ISOweekStart;
    }


    function getDateRangeOfWeek(w, y) {
        var monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];
        var date = getDateOfISOWeek(w, y);
        var monthStart = monthNames[date.getMonth()];
        // easily get ending date by adding 6 days more
        date.setDate(date.getDate() + 6);
        // then you can have months
        var monthEnd = monthNames[date.getMonth()];
        return (monthStart == monthEnd) ? monthStart : [monthStart, monthEnd];
    }
    
    console.log(getDateRangeOfWeek(52, 2016));
    console.log(getDateRangeOfWeek(51, 2016));
    console.log(getDateRangeOfWeek(5, 2017));
&#13;
&#13;
&#13;