如何编写不使用Moment.js返回下个月的第一个工作日(星期一至星期五)的日期对象的函数? 这段代码可以让我获得当月的最后一个营业日,但我想将其切换为下个月的第一天。
function lastBusinessDayOfMonth(year, month) {
var date = new Date();
var offset = 0;
var result = null;
if ('undefined' === typeof year || null === year) {
year = date.getFullYear();
}
if ('undefined' === typeof month || null === month) {
month = date.getMonth();
}
do {
result = new Date(year, month, offset);
offset--;
} while (0 === result.getDay() || 6 === result.getDay());
return result;
}
答案 0 :(得分:0)
如果从偏移量= 0开始,则在每个月的最后一天开始,然后从偏移量1开始,并从下个月的第一天开始。而不是使用offset ++向后工作,而是使用offset ++进行向前工作。
1. 2018-12-14 23:00:05 1001
3. 2018-12-14 23:11:16 1001
5. 2018-12-14 23:21:25 1001
7. 2018-12-14 23:32:41 1001
9. 2018-12-14 23:42:51 1001
11. 2018-12-14 23:52:56 1001
答案 1 :(得分:0)
您可以为该月的第一天生成一个日期,如果是星期日则添加一天,如果是星期六则添加两天。
您还应该仔细考虑名称。并非每个星期一至星期五都是工作日,因为有些假期是假期,在许多文化和职业中,商业周都不是星期一至星期五。
/* Return first day in the following month that is Monday to Friday,
* or not Saturday or Sunday.
*
* @param {number|string} year - defaults to current year
* @param {number|string} month - defaults to current month
* @returns {Date} - first day of following month that is Monday to Friday
*/
function firstMonToFriNextMonth(year, month) {
var d = new Date();
d = new Date(Number(year) || d.getFullYear(),
Number(month) || d.getMonth() + 1,
1);
d.getDay() % 6? d : d.setDate((2 + d.getDay()) % 5);
return d;
}
// No args
console.log(firstMonToFriNextMonth().toString());
// Year only
console.log(firstMonToFriNextMonth(2018).toString());
// Month only
console.log(firstMonToFriNextMonth(null, 1).toString());
// All of 2018
for (var i=1; i<13; i++) {
console.log(firstMonToFriNextMonth(2018,i).toString());
}