JavaScript 增加日期对象

示例

为了增加Javascript中的日期对象,我们通常可以这样做:

var checkoutDate = new Date();    // 2016年7月21日星期四10:05:13 GMT-0400(EDT)

checkoutDate.setDate( checkoutDate.getDate() + 1 );

console.log(checkoutDate); // 2016年7月22日星期五10:05:13 GMT-0400(EDT)

可以使用setDate大于当前月天数的值来将日期更改为下个月的某天-

var checkoutDate = new Date();    // 2016年7月21日星期四10:05:13 GMT-0400(EDT)
checkoutDate.setDate( checkoutDate.getDate() + 12 );
console.log(checkoutDate); // 2016年8月2日星期二10:05:13 GMT-0400(EDT)

这同样适用于其他的方法,如getHours(),getMonth()等。

增加工作日

如果您希望增加工作日(在这种情况下,我假设是星期一至星期五),则可以使用该setDate功能,尽管您需要一些额外的逻辑来说明周末(显然这不会考虑国定假日)-

function addWorkDays(startDate, days) {
    // 以数字的形式获取星期几(0 =星期日,1 =星期一,.... 6 =星期六)
    var dow = startDate.getDay();
    var daysToAdd = days;
    // 如果当前日期是星期日,则添加一天
    if (dow == 0)
        daysToAdd++;
    // 如果开始日期加上其他日期在最接近的星期六或之后,则计算周末
    if (dow + daysToAdd >= 6) {
        //从工作日中减去当前工作周中的天数
        var remainingWorkDays = daysToAdd - (5 - dow);
        //添加当前工作周的周末
        daysToAdd += 2;
        if (remainingWorkDays > 5) {
            //通过计算包括多少周,为每个工作周增加两天
            daysToAdd += 2 * Math.floor(remainingWorkDays / 5);
            //如果剩余的WorkDays解析为确切的星期数,则排除最后一个周末
            if (remainingWorkDays % 5 == 0)
                daysToAdd -= 2;
        }
    }
    startDate.setDate(startDate.getDate() + daysToAdd);
    return startDate;
}