我正在尝试获取给定日期后一个工作日的下一个实例的日期。工作日可能是星期一至星期日的任何一天。我正在使用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');
}
这也是使用momentjs的可能答案(假设比赛日为0(星期日)-6):
var startDate = moment(competition.startDate);
var matchDay = Number(matchTimes[0].day);
var daysToAdd = Math.ceil((startDate.day() - matchDay) / 7) * 7 + matchDay;
var proposedDate = moment(startDate).startOf('week').add(daysToAdd, 'd');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句