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」です。これは、「19890831」に10日を追加すると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

ここで回答を参照して、元の日数の差にその数を追加するだけで、2つの日付の間に日曜日がいくつあるかを把握できます。

土曜日と日曜日の数を決定する方法は、Javaスクリプトの2つの日付の間にあります

于 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 に答える