Добавить дни в JavaScript Date

Как добавить дни к текущей Date с помощью JavaScript Есть ли в JavaScript встроенная функция вроде. Чистый AddDay?

вопрос задан 18.02.2009
Ashesh
3789 репутация

36 ответов


  • 840 рейтинг

    Вы можете создать его с: -

    Date.prototype.addDays = function(days) {
        var date = new Date(this.valueOf());
        date.setDate(date.getDate() + days);
        return date;
    }
    
    var date = new Date();
    
    alert(date.addDays(5));

    Это обеспечивает автоматическое увеличение месяца при необходимости. Например:

    8/31 + 1 день станет 9/1 .

    Проблема с использованием setDate напрямую заключается в том, что это мутатор, и такого рода вещи лучше избегать. ECMA счел целесообразным рассматривать Date как изменчивый класс, а не как неизменную структуру.

    ответ дан AnthonyWJones, с репутацией 160565, 19.02.2009
  • 578 рейтинг

    Правильный ответ :

    function addDays(date, days) {
      var result = new Date(date);
      result.setDate(result.getDate() + days);
      return result;
    }
    

    Неверный ответ :

    Этот ответ иногда дает правильный результат, но очень часто возвращает неправильный год и месяц. Единственный раз, когда этот ответ работает, когда дата, к которой вы добавляете дни, совпадает с текущим годом и месяцем.

    // Don't do it this way!
    function addDaysWRONG(date, days) {
      var result = new Date();
      result.setDate(date.getDate() + days);
      return result;
    }
    

    Доказательство / Пример

    Проверить это JsFiddle

    // Correct
    function addDays(date, days) {
        var result = new Date(date);
        result.setDate(result.getDate() + days);
        return result;
    }
    
    // Bad Year/Month
    function addDaysWRONG(date, days) {
        var result = new Date();
        result.setDate(date.getDate() + days);
        return result;
    }
    
    // Bad during DST
    function addDaysDstFail(date, days) {
        var dayms = (days * 24 * 60 * 60 * 1000);
        return new Date(date.getTime() + dayms);    
    }
    
    // TEST
    function formatDate(date) {
        return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
    }
    
    $('tbody tr td:first-child').each(function () {
        var $in = $(this);
        var $out = $('
    ').insertAfter($in).addClass("answer"); var $outFail = $('').insertAfter($out); var $outDstFail = $('').insertAfter($outFail); var date = new Date($in.text()); var correctDate = formatDate(addDays(date, 1)); var failDate = formatDate(addDaysWRONG(date, 1)); var failDstDate = formatDate(addDaysDstFail(date, 1)); $out.text(correctDate); $outFail.text(failDate); $outDstFail.text(failDstDate); $outFail.addClass(correctDate == failDate ? "right" : "wrong"); $outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong"); });
    body {
        font-size: 14px;
    }
    
    table {
        border-collapse:collapse;
    }
    table, td, th {
        border:1px solid black;
    }
    td {
        padding: 2px;
    }
    
    .wrong {
        color: red;
    }
    .right {
        color: green;
    }
    .answer {
        font-weight: bold;
    }
    
    
    
    DST Dates
    Input +1 Day +1 Day Fail +1 Day DST Fail
    03/10/2013
    11/03/2013
    03/09/2014
    11/02/2014
    03/08/2015
    11/01/2015
    2013
    Input +1 Day +1 Day Fail +1 Day DST Fail
    01/01/2013
    02/01/2013
    03/01/2013
    04/01/2013
    05/01/2013
    06/01/2013
    07/01/2013
    08/01/2013
    09/01/2013
    10/01/2013
    11/01/2013
    12/01/2013
    2014
    Input +1 Day +1 Day Fail +1 Day DST Fail
    01/01/2014
    02/01/2014
    03/01/2014
    04/01/2014
    05/01/2014
    06/01/2014
    07/01/2014
    08/01/2014
    09/01/2014
    10/01/2014
    11/01/2014
    12/01/2014
    2015
    Input +1 Day +1 Day Fail +1 Day DST Fail
    01/01/2015
    02/01/2015
    03/01/2015
    04/01/2015
    05/01/2015
    06/01/2015
    07/01/2015
    08/01/2015
    09/01/2015
    10/01/2015
    11/01/2015
    12/01/2015
    ответ дан sparebytes, с репутацией 6882, 30.10.2013
  • 150 рейтинг
    var today = new Date();
    var tomorrow = new Date();
    tomorrow.setDate(today.getDate()+1);
    

    Будьте осторожны, потому что это может быть сложно. При установке «завтра» он работает только потому, что его текущее значение соответствует году и месяцу для «сегодня». Однако установка числа даты, такого как «32», как правило, будет работать нормально, чтобы перенести его на следующий месяц.

    ответ дан Joel Coehoorn, с репутацией 299287, 19.02.2009
  • 65 рейтинг

    Эти ответы кажутся мне запутанными, я предпочитаю:

    var ms = new Date().getTime() + 86400000;
    var tomorrow = new Date(ms);
    

    getTime () дает нам миллисекунды с 1970 года, а 86400000 - это количество миллисекунд в день. Следовательно, ms содержит миллисекунды для желаемой даты.

    Использование миллисекундного конструктора дает желаемый объект даты.

    ответ дан Jason, с репутацией 804, 15.02.2012
  • 64 рейтинг

    Мое решение:

    nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
    

    Это решение не имеет проблемы с переходом на летнее время. Кроме того, можно добавлять / добавлять любые смещения для лет, месяцев, дней и т. Д.

    day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
    

    правильный код.

    ответ дан sbrbot, с репутацией 2803, 3.12.2012
  • 42 рейтинг

    Попробуйте

    var someDate = new Date();
    var duration = 2; //In Days
    someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));
    

    Использование setDate () для добавления даты не решит вашу проблему, попробуйте добавить несколько дней в февраль месяц, если вы попытаетесь добавить к нему новые дни, это не приведет к ожидаемому результату.

    ответ дан sufyan.shoaib, с репутацией 795, 2.05.2012
  • 28 рейтинг

    Только что потратил целую вечность, пытаясь понять, что было с соглашением за год, не прибавляя следуя приведенным ниже примерам.

    Если вы хотите просто добавить n дней к вашей дате, лучше всего пойти:

    myDate. SETDATE (MyDate. getDate () + n);

    или длинная версия

    var theDate = new Date(2013, 11, 15);
    var myNewDate = new Date(theDate);
    myNewDate.setDate(myNewDate.getDate() + 30);
    console.log(myNewDate);
    

    Это сегодня / завтра вещи сбивают с толку. Установив текущую дату в новую переменную даты, вы запутаете значение года. если вы работаете с первоначальной даты, вы не будете.

    ответ дан Rumpleteaser, с репутацией 2147, 14.02.2013
  • 19 рейтинг

    Если можете, используйте момент . JS . У JavaScript нет очень хороших собственных методов даты / времени. Ниже приведен пример синтаксиса Момента:

    var nextWeek = moment().add(7, 'days');
    alert(nextWeek);
    
    

    Ссылка: http: // momentjs. com / docs / # / манипулирование / добавить /

    ответ дан user2910265, с репутацией 611, 22.12.2013
  • 18 рейтинг

    Я создал эти расширения прошлой ночью:
    вы можете передавать как положительные, так и отрицательные значения;

    пример:

    var someDate = new Date();
    var expirationDate = someDate.addDays(10);
    var previous = someDate.addDays(-5);
    
    
    Date.prototype.addDays = function (num) {
        var value = this.valueOf();
        value += 86400000 * num;
        return new Date(value);
    }
    
    Date.prototype.addSeconds = function (num) {
        var value = this.valueOf();
        value += 1000 * num;
        return new Date(value);
    }
    
    Date.prototype.addMinutes = function (num) {
        var value = this.valueOf();
        value += 60000 * num;
        return new Date(value);
    }
    
    Date.prototype.addHours = function (num) {
        var value = this.valueOf();
        value += 3600000 * num;
        return new Date(value);
    }
    
    Date.prototype.addMonths = function (num) {
        var value = new Date(this.valueOf());
    
        var mo = this.getMonth();
        var yr = this.getYear();
    
        mo = (mo + num) % 12;
        if (0 > mo) {
            yr += (this.getMonth() + num - mo - 12) / 12;
            mo += 12;
        }
        else
            yr += ((this.getMonth() + num - mo) / 12);
    
        value.setMonth(mo);
        value.setYear(yr);
        return value;
    }
    
    ответ дан mark.nino.chua, с репутацией 205, 5.04.2013
  • 13 рейтинг
    int days = 1;
    var newDate = new Date(Date.now() + days * 24*60*60*1000);
    

    CodePen

    var days = 2;
    var newDate = new Date(Date.now() + days * 24*60*60*1000);
    
    document.write('Today: ');
    document.write(new Date());
    document.write('
    New: '); document.write(newDate);
    ответ дан Serge, с репутацией 2753, 1.12.2015
  • 10 рейтинг

    Самое простое решение.

     Date.prototype.addDays = function(days) {
       this.setDate(this.getDate() + parseInt(days));
       return this;
     };
    
     // and then call
    
     var newDate = new Date().addDays(2); //+2 days
     console.log(newDate);
    
     // or
    
     var newDate1 = new Date().addDays(-2); //-2 days
     console.log(newDate1);
    ответ дан ampachts, с репутацией 109, 17.06.2016
  • 9 рейтинг

    Поздно вечером, , но если вы используете jQuery, то есть отличный плагин под названием Момент:

    http: // momentjs. com /

    var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
    

    http: // momentjs. com / docs / # / манипулирование /

    И много других хороших вещей там!

    Редактировать: ссылка jQuery удалена благодаря комментарию aikeru

    ответ дан RemarkLima, с репутацией 7408, 3.10.2014
  • 8 рейтинг

    Спасибо Джейсону за ответ, который работает, как и ожидалось, вот микс из вашего кода и удобного формата AnthonyWJones:

    Date.prototype.addDays = function(days){
        var ms = new Date().getTime() + (86400000 * days);
        var added = new Date(ms);
        return added;
    }
    
    ответ дан Olivier, с репутацией 1193, 4.09.2012
  • 7 рейтинг

    Старый я знаю, но иногда мне нравится это:

    function addDays(days) {
        return new Date(Date.now() + 864e5 * days);
    }
    
    ответ дан Todd, с репутацией 4394, 12.12.2014
  • 6 рейтинг

    Документы Mozilla для setDate () не указывают, что он будет обрабатывать сценарии на конец месяца. См. https: // разработчик. Mozilla. org / en-US / docs / JavaScript / Reference / Global_Objects / Date

    setDate ()

    • Устанавливает день месяца (1-31) для указанной даты по местному времени.

    Вот почему я использую setTime (), когда мне нужно добавить дни.

    ответ дан Blake Mills, с репутацией 529, 28.09.2012
  • 5 рейтинг

    Нет, в JavaScript нет встроенной функции, но Вы можете использовать простую строку кода

    timeObject.setDate(timeObject.getDate() + countOfDays);
    
    ответ дан Vahag Chakhoyan, с репутацией 101, 13.05.2016
  • 5 рейтинг

    Думаю, я тоже дам ответ:
    Лично мне нравится стараться избегать необоснованного объявления переменных, вызовов методов и вызовов конструкторов, так как все они дорогостоящие по производительности. (в пределах разумного, конечно)
    Я собирался оставить это как просто комментарий под Ответом, данным @AnthonyWJones, но думал лучше

    // Prototype usage...
    Date.prototype.addDays = Date.prototype.addDays || function( days ) {
        return this.setTime( 864E5 * days + this.valueOf() ) && this;
    };
    
    // Namespace usage...
    namespace.addDaysToDate = function( date, days ) {
        return date.setTime( 864E5 * days + date.valueOf() ) && date;
    };
    
    // Basic Function declaration...
    function addDaysToDate( date, days ) {
        return date.setTime( 864E5 * days + date.valueOf() ) && date;
    };
    

    Выше будет уважать DST. Это означает, что если вы добавите количество дней, пересекающих DST, отображаемое время (часы) изменится, чтобы отразить это.
    Пример:
    2 ноября 2014 02:00 был конец летнего времени.

    var dt = new Date( 2014, 10, 1, 10, 30, 0 );
    console.log( dt );                  // Sat Nov 01 2014 10:30:00
    console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00
    

    Если вы хотите сохранить время по летнему времени (10:30 все равно будет 10:30). , ,

    // Prototype usage...
    Date.prototype.addDays = Date.prototype.addDays || function( days ) {
        return this.setDate( this.getDate() + days ) && this;
    };
    
    // Namespace usage...
    namespace.addDaysToDate = function( date, days ) {
        return date.setDate( date.getDate() + days ) && date;
    };
    
    // Basic Function declaration...
    function addDaysToDate( date, days ) {
        return date.setDate( date.getDate() + days ) && date;
    };
    

    Итак, теперь у вас есть. , ,

    var dt = new Date( 2014, 10, 1, 10, 30, 0 );
    console.log( dt );                  // Sat Nov 01 2014 10:30:00
    console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00
    
    ответ дан Duncan, с репутацией 1262, 15.10.2014
  • 5 рейтинг

    Я использую что-то вроде:

    new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
    

    Работает в режиме экономии времени:

    new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
    

    Работает с новым годом:

    new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
    

    Может быть параметризован:

    function DateAdd(source, amount, step) {
      var factor = 1;
      if (step == "day") factor = 24 * 60 * 60 * 1000;
      else if (step == "hour") factor = 60 * 60 * 1000;
      ...
      new Date(source.getTime() + amount * factor);
    }
    
    ответ дан kpull1, с репутацией 1265, 5.06.2014
  • 5 рейтинг

    У меня были проблемы с переходом на летнее время с предложенным решением.

    Используя getUTCDate/setUTCDate вместо этого, я решил свою проблему.

    // Curried, so that I can create helper functions like `add1Day`
    const addDays = num => date => {
      // Make a working copy so we don't mutate the supplied date.
      const d = new Date(date);
    
      d.setUTCDate(d.getUTCDate() + num);
    
      return d;
    }
    
    ответ дан Joshua Comeau, с репутацией 1139, 25.11.2016
  • 4 рейтинг

    Я использую следующее решение.

    var msInDay = 86400000;
    var daysToAdd = 5;
    var now = new Date();
    var milliseconds = now.getTime();
    var newMillisecods = milliseconds + msInDay * daysToAdd;
    var newDate = new Date(newMillisecods);
    //or now.setTime(newMillisecods);
    

    У даты есть конструктор, который принимает int. Этот аргумент представляет общее количество миллисекунд до / после 1 января 1970 года. Он также имеет метод setTime, который делает то же самое, не создавая новый объект Date.

    Здесь мы конвертируем дни в миллисекунды и добавляем это значение к значению, предоставленному getTime. Наконец, мы передаем результат конструктору Date (миллисекунды) или методу setTime (миллисекунды).

    ответ дан Vakho, с репутацией 117, 27.01.2015
  • 4 рейтинг

    Редактировать: Вместо setTime() (или setHours()) вы можете сделать это следующим образом:

    Date.prototype.addDays= function(d){
      this.setDate(this.getDate() + d);
      return this;
    };
    
    var tomorrow = new Date().addDays(1);
    

    Старый:

    Вместо setTime() вы можете использовать setHours():

    Date.prototype.addDays= function(d){
        this.setHours(this.getHours() + d * 24);
        return this;
    };
    
    var tomorrow = new Date().addDays(1);
    

    См. JSFiddle . , ,

    ответ дан spaark, с репутацией 379, 9.04.2015
  • 4 рейтинг

    Очень простой код для добавления дней в дате в сценарии Java.

    var d = new Date();
    d.setDate(d.getDate() + prompt('how many days you want to add write here'));
    alert(d);
    ответ дан Rana Aalamgeer, с репутацией 519, 21.09.2016
  • 2 рейтинг
        //the_day is 2013-12-31
        var the_day = Date.UTC(2013, 11, 31); 
        // Now, the_day will be "1388448000000" in UTC+8; 
        var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
        // Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"
    
    ответ дан cs1707, с репутацией 439, 28.12.2013
  • 2 рейтинг

    Для тех, кто использует Angular:

    Просто сделай:

    $scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
    $scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
    
    ответ дан user3806549, с репутацией 736, 2.07.2015
  • 2 рейтинг

    Наша команда считает date-fns лучшей библиотекой в ​​этом пространстве. Он рассматривает даты как неизменных ( Момент. js, вероятно, никогда не примет неизменность ), он быстрее и может быть загружен модульно.

    const newDate = DateFns.addDays(oldDate, 2);
    
    ответ дан Luke Williams, с репутацией 1050, 6.06.2017
  • 2 рейтинг

    Существует метод setDate и getDate , который позволяет вам сделать что-то вроде этого:

    var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
    

    Если вы хотите вычесть количество дней и отформатировать дату в удобочитаемом формате, вам следует рассмотреть возможность создания пользовательского объекта DateHelper, который выглядит примерно так:

    var DateHelper = {
        addDays : function(aDate, numberOfDays) {
            aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
            return aDate;                                  // Return the date
        },
        format : function format(date) {
            return [
               ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
               ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
               date.getFullYear()                          // Get full year
            ].join('/');                                   // Glue the pieces together
        }
    }
    
    // With this helper, you can now just use one line of readable code to :
    // ---------------------------------------------------------------------
    // 1. Get the current date
    // 2. Add 20 days
    // 3. Format it
    // 4. Output it
    // ---------------------------------------------------------------------
    document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

    (см. Также this Fiddle )

    ответ дан John Slegers, с репутацией 26343, 16.04.2018
  • 1 рейтинг

    Вы можете использовать JavaScript, JQuery не требуется:

    var someDate = new Date();
    var numberOfDaysToAdd = 6;
    someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
    Formatting to dd/mm/yyyy :
    
    var dd = someDate.getDate();
    var mm = someDate.getMonth() + 1;
    var y = someDate.getFullYear();
    
    var someFormattedDate = dd + '/'+ mm + '/'+ y;
    
    ответ дан Rohit.007, с репутацией 1317, 14.07.2018
  • 1 рейтинг

    Вы можете создать свою пользовательскую вспомогательную функцию здесь

    function plusToDate(currentDate, unit, howMuch) {
    
        var config = {
            second: 1000, // 1000 miliseconds
            minute: 60000,
            hour: 3600000,
            day: 86400000,
            week: 604800000,
            month: 2592000000, // Assuming 30 days in a month
            year: 31536000000 // Assuming 365 days in year
        };
    
        var now = new Date(currentDate);
    
        return new Date(now + config[unit] * howMuch);
    }
    
    var today = new Date();
    var theDayAfterTommorow = plusToDate(today, 'day', 2);
    

    Кстати, это общее решение для добавления секунд, минут или дней, что вы хотите.

    ответ дан Jitesh Tukadiya, с репутацией 649, 25.02.2017
  • 1 рейтинг
    function addDays(n){
        var t = new Date();
        t.setDate(t.getDate() + n); 
        var month = "0"+(t.getMonth()+1);
        var date = "0"+t.getDate();
        month = month.slice(-2);
        date = date.slice(-2);
         var date = date +"/"+month +"/"+t.getFullYear();
        alert(date);
    }
    
    addDays(5);
    
    ответ дан Libu Mathew, с репутацией 1774, 20.08.2017
  • 0 рейтинг

    Я использовал этот подход, чтобы получить правильную дату в одной строке, чтобы получить время плюс один день после того, что люди говорили выше.

    ((new Date()).setDate((new Date()).getDate()+1))
    

    Я просто подумал, что построил бы нормальный (new Date()):

    (new Date()).getDate()
    > 21
    

    Используя приведенный выше код, я теперь могу установить все это в Date() в (new Date()), и он будет работать нормально

    (new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate()
    > 22
    

    или получить объект Date:

    (new Date(((new Date()).setDate((new Date()).getDate()+1))))
    
    ответ дан yolk, с репутацией 414, 22.12.2013
  • 0 рейтинг

    2. 39KB минимизировано. Один файл. https: // github. com / rhroyston / clock-js

    console.log(clock.what.weekday(clock.now + clock.unit.days)); //"wednesday"
    console.log(clock.what.weekday(clock.now + (clock.unit.days * 2))); //"thursday"
    console.log(clock.what.weekday(clock.now + (clock.unit.days * 3))); //"friday"
    
    
    ответ дан Ron Royston, с репутацией 5124, 3.05.2016
  • 0 рейтинг

    попробуйте это

    function addDays(date,days) {        
          var one_day=1000*60*60*24; 
          return new Date(date.getTime()+(days*one_day)).toLocaleDateString(); 
        }
    
    ответ дан LeMAK-Soft, с репутацией 19, 22.11.2017
  • 0 рейтинг

    Не могу поверить, что после 5 лет в этой теме нет решения для нарезки пасты!
    SO: для получения одинакового времени суток независимо от летних помех:

    Date.prototype.addDays = function(days)
        {
        var dat = new Date( this.valueOf() )
    
        var hour1 = dat.getHours()
        dat.setTime( dat.getTime() + days * 86400000) // 24*60*60*1000 = 24 hours
        var hour2 = dat.getHours()
    
        if (hour1 != hour2) // summertime occured +/- a WHOLE number of hours thank god!
            dat.setTime( dat.getTime() + (hour1 - hour2) * 3600000) // 60*60*1000 = 1 hour
    
        return dat
    or
        this.setTime( dat.getTime() ) // to modify the object directly
        }
    

    Там. Готово!

    ответ дан T4NK3R, с репутацией 2113, 17.08.2014
  • 0 рейтинг

    Самый простой способ сделать это - использовать библиотеку date-fns .

    var addDays = require('date-fns/add_days')
    addDays(date, amount)
    

    Документация доступна по этой ссылке здесь . Вы также можете сделать это, используя момент. JS . Ссылка здесь

    Надеюсь, это поможет!

    ответ дан Tuan, с репутацией 38, 23.06.2018
  • -1 рейтинг

    Я суммирую часы и дни. , ,

    Date.prototype.addDays = function(days){
        days = parseInt(days, 10)
        this.setDate(this.getUTCDate() + days);
        return this;
    }
    
    Date.prototype.addHours = function(hrs){
        var hr = this.getUTCHours() + parseInt(hrs  , 10);
        while(hr > 24){
          hr = hr - 24;
          this.addDays(1);
        }
    
        this.setHours(hr);
        return this;
    }
    
    ответ дан user2043372, с репутацией 31, 29.07.2014
  • -8 рейтинг

    тот же ответ: Как добавить количество дней к сегодняшней дате?

        function DaysOfMonth(nYear, nMonth) {
            switch (nMonth) {
                case 0:     // January
                    return 31; break;
                case 1:     // February
                    if ((nYear % 4) == 0) {
                        return 29;
                    }
                    else {
                        return 28;
                    };
                    break;
                case 2:     // March
                    return 31; break;
                case 3:     // April
                    return 30; break;
                case 4:     // May
                    return 31; break;
                case 5:     // June
                    return 30; break;
                case 6:     // July
                    return 31; break;
                case 7:     // August
                    return 31; break;
                case 8:     // September
                    return 30; break;
                case 9:     // October
                    return 31; break;
                case 10:     // November
                    return 30; break;
                case 11:     // December
                    return 31; break;
            }
        };
    
        function SkipDate(dDate, skipDays) {
            var nYear = dDate.getFullYear();
            var nMonth = dDate.getMonth();
            var nDate = dDate.getDate();
            var remainDays = skipDays;
            var dRunDate = dDate;
    
            while (remainDays > 0) {
                remainDays_month = DaysOfMonth(nYear, nMonth) - nDate;
                if (remainDays > remainDays_month) {
                    remainDays = remainDays - remainDays_month - 1;
                    nDate = 1;
                    if (nMonth < 11) { nMonth = nMonth + 1; }
                    else {
                        nMonth = 0;
                        nYear = nYear + 1;
                    };
                }
                else {
                    nDate = nDate + remainDays;
                    remainDays = 0;
                };
                dRunDate = Date(nYear, nMonth, nDate);
            }
            return new Date(nYear, nMonth, nDate);
        };
    
    ответ дан K. Udomjindawimon, с репутацией 9, 5.10.2012