按年,月和周的编号获取一周的开始和结束日期

时间:2019-06-03 10:59:16

标签: javascript datetime momentjs

目标

我想通过提供年,月和周的编号来获取开始日期和结束日期。 我正在尝试使用momentjs,因为它已经存在于我的依赖中。

我完成的工作

如果我设置.month(monthInNumber)似乎是不可能的,因为我没有星期一,而且搞砸了,所以我所做的是天真的方式,它无法工作= 4 * month并将其设置为星期

getStartDateByWeekAndYear = function(week, year, month) {
    return moment().day("Monday").year(year).week((4*month)+(week)).toDate();
};

对于最后一天(我希望Satruday作为最后一天而不是星期日)

getLastDateByWeekAndYear = function(week, year, month) {
    return moment().day("Saturday").year(year).week((4*month)+(week)).toDate();
};

我也尝试了几种解决方案,但是如果我尝试在上述功能中实现相同的功能,那似乎就行不通了。

预期产量

getStartDateByWeekAndYear(2, 2019, 6)

我应该在2019年6月3日,星期一,今天今天

getEndDateByWeekAndYear(2, 2019, 6)

我应该在2019年6月8日(星期六),这是本周的星期六

1 个答案:

答案 0 :(得分:1)

您可以使用moment({Object})获取给定月份/年份的开始日期,然后使用add()添加周数来获取所需的星期。

这里有一个现场样本:

const getStartDateByWeekAndYear = function(week, year, month) {
    return moment({y: year, M: month-1, d: 1})
      .add(week-1, 'w').day("Monday").toDate();
};

const getEndDateByWeekAndYear = function(week, year, month) {
    return moment({y: year, M: month-1, d: 1})
      .add(week-1, 'w').day("Saturday").toDate();
}

console.log( getStartDateByWeekAndYear(2, 2019, 6) );
console.log( getEndDateByWeekAndYear(2, 2019, 6)  );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>