javascript:获取下个月的第一个工作日

时间:2018-12-17 21:04:03

标签: javascript date

如何编写不使用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;

}

2 个答案:

答案 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());
}