1

有没有办法用 MomentJS 获得两个日期之间经过的工作日?工作日将是没有周末的那一周,或者是星期一、星期二、星期三、星期四和星期五。到目前为止,我尝试使用如下diff()方法(http://momentjs.com/docs/#/displaying/difference/):

var daysElapsed = today.diff(past, 'days');

据我所知,diff()唯一的方法是提供两个日期之间的所有日子,包括周末。谢谢你的时间!

4

3 回答 3

3
let start = moment(startDate, 'YYYY-MM-DD'); //Pick any format
let end = moment(); //right now (or define an end date yourself)
let weekdayCounter = 0;  

while (start <= end) {
 if (start.format('ddd') !== 'Sat' && start.format('ddd') !== 'Sun'){
   weekdayCounter++; //add 1 to your counter if its not a weekend day
 }
 start = moment(start, 'YYYY-MM-DD').add(1, 'days'); //increment by one day
}
console.log(weekdayCounter); //display your total elapsed weekdays in the console!
于 2017-06-10T03:04:45.163 回答
2

您将需要为此编写自己的函数。

这并不难,因为您知道确切的开始和结束日期。

  1. 获取开始日期和结束日期是一周中的哪一天。
  2. 仅计算两者之间的工作日。

我认为这将是非常直接的实施。

于 2013-09-08T19:33:05.703 回答
0

尽管这个问题已经很老了,但我偶然发现了它,无法找到我正在寻找的真正答案。

我希望这个解决方案对其他人也有帮助:

const momentStart = moment(initialDate);
const momentFinal = moment(finalDate);

// Get the diff in days between both dates
const diff = momentFinal.diff(momentStart, "days");

// If diff is 7 or bigger, all days are included
if (diff >= 7) {
  return moment.weekdays();
}

// Need to calculate, check which day we start from
const firstDay = momentStart.day();
const weekdaysBetween = [];

// For each diff day, we get the next one)
for (let i = 0; i <= diff; i++) {
  // use % to loop to beginning again (e.g: start at friday and have +4)
  weekdaysBetween.push(moment.weekdays((firstDay + i) % 7));
}

return weekdaysBetween;

您还可以在此处查看可用的演示版本

于 2021-03-15T17:12:27.120 回答