在 JavaScript 中从工作日中排除周末日期
Exclude weekend dates from working days in JavaScript
所以我有点卡在弄清楚某个方面。我想要做的是:
假设我只有一个简单的日期显示,它将向最终用户显示 October 10th, 2017
之类的日期。然后有一个选项可以从所述日期中减去一定天数(偏移量 1、2、3,无论选择何种偏移量)。
我想要做的是从计数中完全排除周末日期 - 所以如果今天是 Monday, October 9th
,并且选择了 1 的 offset,它会至 Friday the 6th
;如果选择 偏移量 2,它会转到 Thursday the 5th
; 偏移量 3 转到 Wednesday the 4th
...
如果今天是 Wednesday, October 11th
,偏移量 2 会将您带到 Monday the 9th
,偏移量 4[=45] =] 会转到 Thursday the 5th
,依此类推( 在计算/减去登陆日期 时完全忽略/跳过周末日期)。
到目前为止,我只能找到计算不包括周末的工作日数的功能的答案,以及类似性质的东西(我已经有了,使用 momentjs-business npm模块,但不完全是我需要的).
我没有 post 代码,因为这是一个更大的代码库的一部分,我觉得 post 片段只会增加混乱,因为我认为这个问题相对简单直截了当;我不想过于复杂。
我只想在设置偏移量时完全不包括周末,无论从哪个日期显示给用户(显示给用户的日期来自数据库).
我希望这一切都有意义,如果需要更多信息,请告诉我。提前感谢任何能给我指出正确方向的人!
JavaScript 日期对象有一个 getDay() 方法可以告诉您今天是星期几。您可以使用它来确定哪些日期是周末并排除它们。
var date = new Date();
var dayOfWeek = date.getDay();
console.log(dayOfWeek) // 1 for Monday, 2 for Tuesday, etc.
这样就可以达到我想的效果了。请注意,这是非常低效的。如果您的偏移量非常大,它会在循环的每次迭代中生成一个新日期。通过一些修补,它可以得到优化
let startDate = new Date('10/10/2017');
let endDate = "", offset = 2;
while(offset > 0){
endDate = new Date(startDate.setDate(startDate.getDate() - 1));
if(endDate.getDay() !== 0 && endDate.getDay() !== 6){
offset--;
}
}
这是一个有效的Fiddle
您可以使用 moment-business library. It has the subtractWeekDays
那:
Subtract week days from the moment, modifying the original moment. Returns the moment.
您的代码可能如下所示:
var m = moment("October 10th, 2017", "MMMM Do, YYYY");
business.subtractWeekDays(m, 2);
如果您不想添加外部库,请查看 addWeekDays
and subtractWeekDays
代码。
所以我有点卡在弄清楚某个方面。我想要做的是:
假设我只有一个简单的日期显示,它将向最终用户显示 October 10th, 2017
之类的日期。然后有一个选项可以从所述日期中减去一定天数(偏移量 1、2、3,无论选择何种偏移量)。
我想要做的是从计数中完全排除周末日期 - 所以如果今天是 Monday, October 9th
,并且选择了 1 的 offset,它会至 Friday the 6th
;如果选择 偏移量 2,它会转到 Thursday the 5th
; 偏移量 3 转到 Wednesday the 4th
...
如果今天是 Wednesday, October 11th
,偏移量 2 会将您带到 Monday the 9th
,偏移量 4[=45] =] 会转到 Thursday the 5th
,依此类推( 在计算/减去登陆日期 时完全忽略/跳过周末日期)。
到目前为止,我只能找到计算不包括周末的工作日数的功能的答案,以及类似性质的东西(我已经有了,使用 momentjs-business npm模块,但不完全是我需要的).
我没有 post 代码,因为这是一个更大的代码库的一部分,我觉得 post 片段只会增加混乱,因为我认为这个问题相对简单直截了当;我不想过于复杂。
我只想在设置偏移量时完全不包括周末,无论从哪个日期显示给用户(显示给用户的日期来自数据库).
我希望这一切都有意义,如果需要更多信息,请告诉我。提前感谢任何能给我指出正确方向的人!
JavaScript 日期对象有一个 getDay() 方法可以告诉您今天是星期几。您可以使用它来确定哪些日期是周末并排除它们。
var date = new Date();
var dayOfWeek = date.getDay();
console.log(dayOfWeek) // 1 for Monday, 2 for Tuesday, etc.
这样就可以达到我想的效果了。请注意,这是非常低效的。如果您的偏移量非常大,它会在循环的每次迭代中生成一个新日期。通过一些修补,它可以得到优化
let startDate = new Date('10/10/2017');
let endDate = "", offset = 2;
while(offset > 0){
endDate = new Date(startDate.setDate(startDate.getDate() - 1));
if(endDate.getDay() !== 0 && endDate.getDay() !== 6){
offset--;
}
}
这是一个有效的Fiddle
您可以使用 moment-business library. It has the subtractWeekDays
那:
Subtract week days from the moment, modifying the original moment. Returns the moment.
您的代码可能如下所示:
var m = moment("October 10th, 2017", "MMMM Do, YYYY");
business.subtractWeekDays(m, 2);
如果您不想添加外部库,请查看 addWeekDays
and subtractWeekDays
代码。