如何在日期中添加n天,但使用yyyymmdd格式排除星期日?

时间:2012-09-02 17:32:50

标签: javascript jquery jquery-ui

我希望在'yyyymmdd'格式的给定日期后'n'天之后的日期(输出也是相同的格式)。添加n天应该排除星期日。是否可以在javascript中执行此操作?

以下是我将n天添加到日期的代码

    function mydate(dateStr,offset) 
    {
       var ymd = dateStr.match(/^(\d{4})(\d{2})(\d{2})$/);
       if (ymd) 
       {
         var date = new Date(ymd[1], ymd[2] - 1, ymd[3]);
         date.setDate(date.getDate() + offset);
         return $.datepicker.formatDate('yymmdd', date);
       } 
       else 
       {  // parse error
         return null;
       }
    }

例如,

    mydate('19890831',10)

将返回

    19890910

但实际上我需要的是'19891012'因为我们在'19890831'中加入10天有2个星期日

3 个答案:

答案 0 :(得分:2)

简单的解决方案;你可以循环过去并跳过星期日:

while (offset > 0) {      
  date.setDate(date.getDate() + 1);
  if (date.getDay() != 0) offset--;
}

答案 1 :(得分:0)

你可以参考这里的答案来弄清楚两个日期之间有多少个星期日你可以简单地将这个数字添加到原来的日期差异。

How to determine number Saturdays and Sundays comes between two dates in java script

答案 2 :(得分:0)

function pad(n){
    if(n < 10){
        return "0" + n;
    }
    return n;
}

function addDays(dt, n){
    var matches = dt.match(/^(\d{4})(\d{2})(\d{2})$/);
    var year = matches[1];
    var month = matches[2];
    var day = matches[3];

    var dt = new Date(year, month - 1, day);
    var weekDay = dt.getDay();

    if((weekDay + n) > 6){
        n = n + 1;
    }

    if(weekDay === 0){
        n = n + 1;
    }

    var oneDayInMillis = 1 * 24 * 60 * 60 * 1000;
    var newDt = new Date(dt.getTime() + (oneDayInMillis * n));

    return "" + newDt.getFullYear() + pad(newDt.getMonth() + 1) + pad(newDt.getDate());
}