0

我想要一个从给定日期以'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”,因为当我们将 10 天添加到“19890831”时,有 2 个星期日

4

3 回答 3

2

简单的解决方案;您可以循环浏览这些日子并跳过星期天:

while (offset > 0) {      
  date.setDate(date.getDate() + 1);
  if (date.getDay() != 0) offset--;
}
于 2012-09-02T17:50:17.330 回答
0

您可以在此处参考答案以计算出两个日期之间有多少个星期日,一旦您有了,您可以简单地将该数字添加到您原来的天数差异中。

java - 如何确定Java脚本中两个日期之间的星期六和星期日的数量

于 2012-09-02T17:39:50.453 回答
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());
}
于 2012-09-02T18:16:10.310 回答