使用moment.js获取上一个工作日

Acu*_*nus 2 javascript momentjs

使用moment.js获取前一个工作日的最佳方式是什么?工作日是周一至周五.

一些期望:

  • 如果今天是Satuday,周日或周一,则返回上周五的日期
  • 如果今天是星期二,则返回上周一的日期(昨天)

Acu*_*nus 6

function getPreviousWorkday(){
  let workday = moment();
  let day = workday.day();
  let diff = 1;  // returns yesterday
  if (day == 0 || day == 1){  // is Sunday or Monday
    diff = day + 2;  // returns Friday
  }
  return workday.subtract(diff, 'days');
}
Run Code Online (Sandbox Code Playgroud)


Rio*_*ams 5

更新的方法(没有循环)

您实际上可以利用day()允许您在moment.js中设置当前星期几的函数来查找基于特定日期的上一个星期五:

function getPreviousWorkday(){
  // Based on the current day, handle accordingly
  switch(moment().day())
  {
      // If it is Monday (1),Saturday(6), or Sunday (0), Get the previous Friday (5)
      // and ensure we are on the previous week
      case 0:
      case 1:
      case 6:
        return moment().subtract(6,'days').day(5);
      // If it any other weekend, just return the previous day
      default:
        return moment().day(today - 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

可以在这里看到并在下面演示:

在此输入图像描述

循环方式

你可以简单地从你当前时刻的实例中减去当天通过subtract()函数的天数,直到你到达非周末日:

function getPreviousWorkday(){
  // Get today
  var today = new moment().subtract(-1,'days');;
  // If today isn't a weekend, continue iterating back until you hit a non-weekend
  while([0,6].indexOf(today.day()) !== -1){
    today = today.subtract(1, 'days');
  }
  // Return the non-weekend day
  return today;
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看此操作的示例,并在下面进行演示:

在此输入图像描述