【发布时间】:2016-01-24 06:35:34
【问题描述】:
我正在尝试获取给定日期之后下一个工作日的日期。工作日可以是从星期一到星期日的任何一天。我正在使用 Moment.js 库,但似乎没有一种简单的方法可以实现我所追求的目标。
这是我目前所拥有的,但它没有返回我想要的日期:
// competition.startDate = 2016-02-10 (Wednesday)
var startDate = moment(competition.startDate);
...
for (m = 0; m < matchesPerRound; m++) {
var date;
...
// matchTime[m].day = 3 (Wednesday)
date = startDate.startOf('week').add(7, 'days').subtract(matchTime[m].day, 'days');
console.log(date.format('YYYY-MM-DD'));
// Actual Output = 2016-02-11
// Expected Output = 2016-02-10
...
}
对于上面的示例,我需要它返回2016-02-15,因为这是2016-02-10 之后的下周一。这没问题,我可以得到那个日期。我的问题是我需要更动态的东西,因为matchTime[m].day 可以是任何工作日数字。例如,如果 matchTime[m].day = 3 // Wednesday,它应该只返回与这是星期三相同的 startDate 2016-02-10。
如果可能,我会尽量避免使用条件语句,但我想知道 Moment.js 是否具有开箱即用的功能来产生这些结果。
更新
我想出了一个解决方案,它符合我的要求,但我觉得它非常混乱。其他人有更清洁、更简洁的解决方案吗?
var date;
var startDate = moment(competition.startDate);
var proposedDate = moment(startDate).startOf('isoweek').add(matchTimes[0].day - 1, 'd');
if ( startDate.isAfter(proposedDate) ) {
date = startDate.startOf('isoweek').add(7 + Number(matchTimes[0].day) - 1, 'd');
} else {
date = startDate.startOf('isoweek').add(matchTimes[0].day - 1, 'd');
}
【问题讨论】:
标签: javascript date momentjs