Moment.js,下一个[工作日]

时间:2017-03-05 19:23:05

标签: javascript date momentjs

尝试使用moment.js获得第二个星期四(例如)。 本周四。下一个。这个日期是2个星期四。

我试过了

moment().add(1, 'week').day(4)

刚刚取消下周的星期四(仅在当前工作日在星期四之前有效)

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

"它只是下周四的星期四(只有当前工作日在星期四之前才有效)"

它正在发生,因为.add(1,'周')只是增加了7天,并为您提供下周的日期,并且您将获取该周的第4天。 下面的代码将完美适用于您的情况。

if(moment().weekday() < 4)
 moment().add(1, 'week').day(4);
else
 moment().add(2, 'week').day(4);

答案 1 :(得分:1)

不确定使用moment.js,但在下周四的普通js中给出了:

currentDate + (11 - d.getDay() % 7)

在接下来的星期四,只需添加7天。据推测,如果当天是星期四,那么就要在两周内举行星期四会议:

var d = new Date();
console.log(d.toString());

// Shift to next Thursday
d.setDate(d.getDate() + ((11 - d.getDay()) % 7 || 7) + 7)
console.log(d.toString())

或者通过一些测试封装在一个函数中:

function nextThursdayWeek(d) {
  d = d || new Date();
  d.setDate(d.getDate() + ((11 - d.getDay()) % 7 || 7) + 7);
  return d;
}

// Test data
[new Date(2017,2,6),  // Mon  6 Mar 2017
 new Date(2017,2,7),  // Tue  7 Mar 2017
 new Date(2017,2,8),  // Wed  8 Mar 2017
 new Date(2017,2,9),  // Thu  9 Mar 2017
 new Date(2017,2,10), // Fri 10 Mar 2017
 new Date(2017,2,11), // Sat 11 Mar 2017
 new Date(2017,2,12), // Sun 12 Mar 2017
 new Date()           // Today
].forEach(function (date) {
  console.log(date.toString() + ' -> ' + nextThursdayWeek(date).toString());
});