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

1098

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

Ashesh
источник

Ответы:

1212

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

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));

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

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

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

AnthonyWJones
источник
17
Упрощенно:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Дункан
27
@Duncan Вы уверены, что это то же самое, что и выше? Этот просто добавляет 24 часа, но один день не всегда 24 часа . Я думаю, вопрос в том, как увеличить часть даты на 1 день, не меняя часть времени.
Тамас Болвари
88
864E5по какой-то причине я предпочитаю писать 24*60*60в своем коде :)
Марс Робертсон
62
Ребята, не используйте метод добавления 864E5, потому что это не требует перехода на летнее время, когда дни могут составлять 23 или 25 часов.
sbrbot
12
Для тех из вас, кто переживает за летнее время - не надо. Эти алгоритмы изменяют основную дату, а не то, как она интерпретируется. DST реализован в методах получения и установки даты - в методах получения вычитается час летом, а в параметре установки - добавление этого часа назад для нормализации времени. Но только при использовании абсолютного часа - относительные часы не нужно интерпретировать. Вот почему дата математика работает. ИМХО ...
Джерард ONeill
756

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

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

sparebytes
источник
@bzlm, да по сути тоже самое. Он просто не изменяет прототип Date. Я также хотел указать на недостатки в основном ответе.
Резервные байты
Принятый ответ был отредактирован две недели назад, чтобы указать на его недостатки. Как вы думаете, это нуждается в дальнейшем редактировании? Если так, то как?
bzlm
7
@bzlm: Да, я считаю, что в записке должно быть написано «этот подход не работает, если дата« from »не совпадает с текущим годом или месяцем ». Я все еще волнуюсь, что пользователи будут просматривать ответ и не будут читать предупреждение, поскольку оно не выделяется. Спасибо.
резервные байты
3
Я думаю, даже если эта работа не является правильной. Для Date нет такого конструктора: var result = new Date (date); см. http://www.w3schools.com/js/js_dates.asp . Даже если это обычно работает, иногда может привести к неправильным результатам из-за преобразования в строку и наоборот. Это должно быть var result = new Date (date.getTime ());
Марцин
2
@AnkitBalyan, смотрите другие ответы. Это может работать некорректно из-за
перехода
188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

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

Джоэл Коухорн
источник
1
Да? Но что это? (работает 31 марта 2010 г.): сегодня = новая дата (); завтра = новая дата (); tomorrow.setDate (today.getDate () + 1); Оповещение (tomorrow.getMonth ()); Говорит "3". Оповещение (завтра); правильно ... почему ???
d -_- б
12
Месяц @sims проиндексирован на 0. Месяц 3 апреля
Джоэл Кохорн
7
Зачем нужно создавать 2 отдельных объекта даты? Почему бы просто не использовать один и тот же объект даты var d = new Date(); d.setDate( d.getDate() + 1 );?
Джозеф Силбер
8
Этот подход не работает годами. Если ваша дата начала с нескольких лет назад, getDate()возвращает день этого года . Затем вызов setDateустанавливает день в текущем году . Так что это НЕ хорошее общее решение. Ответ @ AnthonyWJones на самом деле работает правильно.
Дрю Ноакс
3
@ DrewNoakes - ваше утверждение, что оно не работает годами, неверно. getDate возвращает день месяца, а не «день этого года». Напримерvar d = new Date(2015,11,30);d.setDate(d.getDate() + 370) дает 3 января 2017 года, который пересекает 2 года.
RobG
124

Мое простое решение:

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

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

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

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

sbrbot
источник
13
Примечание: это сбрасывает время до 00:00:00 (может быть проблема или нет)
Альваро Гонсалес
Как вы говорите, не работает в последний день месяца. Делает это непригодным на 12 дней в году. Звучит как кошмар для отладки !!!
Дрю Ноакс
6
Нет Дрю, это можно использовать для всех дней в году. Вы можете установить смещение даты больше 31 или смещение месяца больше 12, и эта функция пересчитает его как день в следующем месяце или месяц в следующем году. Так, например: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); это прекрасно код.
Сбрбот
есть getMonth () + 22 - как вы думаете, это будет работать !?
sbrbot
1
Согласен, используйте этот способ. У нас просто была ошибка из-за перехода на летнее время, потому что мы использовали setDate.
Jelle
95

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

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

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

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

Джейсон
источник
46
Это решение не учитывает переход на летнее время. Так, например, это вернет ту же дату, 23 часа спустя: new Date(new Date('11/4/2012').getTime() + 86400000)
Ноа Харрисон
6
@NoahMiller Проблема, которую вы поднимаете, может быть функцией, а не ошибкой! Добавление 24 часов в день иногда является правильным решением с целью узнать конечное время на основе летнего времени. Дата, которую возвращает ваш пример, имеет значение времени 11 вечера 4 ноября, то есть то, что спустя 24 часа в этот конкретный день. На оригинальном плакате спрашивалось о дате и времени, что, по-видимому, указывает на некоторое желание правильного времени суток. Этот ответ верен, если вы находитесь в том случае, если ваша цель - время спустя 24 часа.
Энди Новоцин
3
Я согласен, что Ноа, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000) делает то, что говорит, добавляет к дате целое число тиков.
Кори Аликс
6
Это абсолютно правильно для некоторых случаев (например, для файлов cookie на 1 день) и является более простым решением, чем большинство других. Я не понимаю, почему у него так много отрицательных и стольких отрицательных голосов: /
Matmarbon
48

Пытаться

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

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

sufyan.shoaib
источник
26
Нет, это не должно быть помечено как правильный ответ, так как это решение предполагает, что каждый день имеет 24 * 60 * 60 * 1000 секунд, но это не так (летнее время)!
sbrbot
Есть ли какие-либо свидетельства о проблеме «Фев» setDate()? Это так: stackoverflow.com/questions/5497637/…
nobar
9
+1 Это СЛЕДУЕТ пометить как правильный ответ. Я полагаю, что «летнее время» - это презентация, а не ценность , которая составляет всего лишь миллисекунды. Из значения -точки зрения - день ФИКС количество миллисекунды, в то время как с точки зрения презентации может отличаться.
Раздраженный
1
@ разочарован - это не правильный ответ. Выходной день на летнее время имеет 25 часов, но этот метод добавляет только 24, поэтому дата будет такой же. Использование 24 часов для представления дня работает, если вместо этого используются методы UTC, но зачем беспокоиться при использовании setDate ? ;-)
RobG
38

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

Если вы хотите просто добавить 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
источник
7
Читая все ответы, пока не найду эту жемчужину здесь. Теперь это имеет смысл. Удивительно, что вещь «сегодня / завтра» была скопирована почти во всех ответах, когда она вообще не имеет смысла и не «для наглядности и ясности», как говорит автор в самом голосуемом ответе - в самом голосуемом комментарии -, это сбивает с толку и плохая практика и неправильно
Сеск
23

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

var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

Ссылка: http://momentjs.com/docs/#/manipulation/add/

user2910265
источник
1
@ kpull1 спрашивающий не ограничивал область решения, спрашивая, существует ли встроенное решение.
user2910265
4
Современное примечание: Moment.js невероятно тяжело добавить для такой маленькой цели. Это несколько сотен килобайт, и он не подходит для веб-упаковки.
Джошуа Комо
1
Наша предпочтительная библиотека - date-fns. Webpack-дружественный, быстрый и рассматривает даты как неизменные.
Freewalker
1
@ LukeWilliams никогда не слышал о свиданиях до сих пор. проверим это. Спасибо.
user2910265
2
@JoshuaComeau Если вы загрузите его с cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , он займет 53 248 байт на диске. Я представляю, что это весь мяч, но я не знаю. Во всяком случае, что угодно. Это не имеет большого значения.
birdus
22
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: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);

саржа
источник
2
Upvote за отсутствие промежуточной даты.
Джефф Лоури
это лучший ответ, потому что у него нет мутации
knocte
Не каждый день имеет 24 часа, он терпит неудачу на летнее время и дополнительные секунды
Стефан
19

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

пример:

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
источник
7
Метод .addDays () не работает для дат, которые пересекают границы летнего времени.
mskfisher
1
Это один из лучших ответов здесь, потому что вы (правильно) используете число миллисекунд, начиная с epoc, для представления даты / времени и добавляете количество миллисекунд для корректировок ... Почему же тогда вы не сохранили это для "addMonths"! ? И почему не добавить год? Тебе стало скучно?
Робин
За исключением месяцев, периоды времени могут быть представлены статическими числами. Но месяцы могут быть четырех разных длин. Кроме того, любая длина периода времени от Дней и выше может иметь переменную длину в летнее время, поэтому вы не можете больше использовать основанное на времени добавление без другого уровня сложности. Я добавил addYears () и исправил addMonths ().
Суамер
14

Не используя вторую переменную, вы можете заменить 7 на следующие x дней:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
vaibhavmaster
источник
14

вычесть 30 дней использования (24 часа = 86400000 мс)

new Date(+yourDate - 30 *86400000)

Камил Келчевски
источник
При попытке вычислить дату и время всегда запоминайте дату и время в миллисекундах в информатике, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) new Date (+ yourDate + 30 * (24 * 60 * 60 * 1000))
Ашраф Абусада
13

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

 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
источник
Я думаю, что это лучшее решение. Если мы расширяем класс Date, то имеет смысл лучше обновить экземпляр Date.
Porlune
11

Решение, разработанное для оператора трубопровода :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

Применение:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

Если вам нужно больше функциональности, я предлагаю заглянуть в библиотеку date-fns .

sdgfsdh
источник
10

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

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}
Оливье
источник
6
Он не учитывает переход на летнее время, когда в день больше или меньше 86400000 секунд, и может привести к логической ошибке (программной ошибке) в вашем коде.
sbrbot
Иногда это необходимо. В eBay API есть x-дневные аукционы, которые основаны на 24-часовом режиме, поэтому ваш товар закончится в другое время, чем при повышении статуса DST в середине аукциона. В этом случае вам нужно использовать этот тип функции, чтобы избежать логических ошибок.
Энди Новоцин
10

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

http://momentjs.com/

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

http://momentjs.com/docs/#/manipulating/

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

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

RemarkLima
источник
1
момент не нуждается в jQuery :)
aikeru
Еще лучше в этом случае!
RemarkLima
1
Да, после долгого общения с Plain ol 'JS я использовал Moment, и он просто работает (тм)!
caseyamcl
Почему вы хотите использовать плагин, когда подойдет несколько строк JS?
Французский
@frenchie, потому что то, что начинается с нескольких строк JS и поскольку ваше приложение явно манипулирует информацией о днях, датах и ​​времени, скоро будет несколько тысяч строк JS, тогда вас попросят локализовать приложение по 12 языков и часовых поясов, и вы хотели бы, чтобы вы начали с чего-то вроде момента;)
RemarkLima
8

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

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}
Тодд
источник
2
Это имеет смысл для меня. Это просто, элегантно и не стоит молиться о проблемах, движущихся месяцами / годами.
Уадрив
1
Простейший ответ представлен. Основываясь на этом, прототип addDays будет выглядеть следующим образом:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974
Не каждый день имеет 24 часа, он терпит неудачу на летнее время и дополнительные секунды
Стефан
8

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

Используя 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;
}
Джошуа Комо
источник
8

Вы можете использовать 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
источник
8

Общий прототип без переменных, он применяется к существующему значению Date:

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}
Маттео Конта
источник
7

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

SETDATE ()

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

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

Блейк Миллс
источник
Я хотел бы сослаться на документы ECMAScript, но они выпускаются в формате PDF; (
Блейк Миллс,
1
« Документы Mozilla для setDate () не указывают, что они будут обрабатывать сценарии на конец месяца ». Документы были обновлены, так что теперь они делают. ;-)
RobG
7

Так просто, как это:

new Date((new Date()).getTime() + (60*60*24*1000));
Дила Гурунг
источник
2
Хотя это добавляет дни в формате UTC, оно использует локальные методы и не учитывает локальные дни продолжительностью не более 24 часов, что происходит при изменении смещения часового пояса (например, при переходе на летнее время и вне него).
RobG
6

Полагаю, я также дам ответ:
лично я хотел бы попытаться избежать необоснованного объявления переменных, вызовов методов и вызовов конструктора, поскольку все они дороги в производительности. (в пределах разумного, конечно)
Я собирался оставить это как просто комментарий под Ответом, данным @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
Дункан
источник
6

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

timeObject.setDate(timeObject.getDate() + countOfDays);
Вааг Чахоян
источник
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
источник
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);

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

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

Вахтанг
источник
Не каждый день имеет 24 часа, он терпит неудачу на летнее время и дополнительные секунды
Стефан
Стефан, какая-нибудь другая библиотека отвечает за это?
Вахтанг
now.setDate(now.getDate() + days);автоматически обрабатывает изменения летнего времени. И я должен исправить, високосные секунды игнорируются в метках времени JS.
Стефан
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
источник
следуя этой логике, вы также можете добавить один день;)d.setDate(d.getDate() + 1);
Rivenfall
4

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

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);

Рана Ааламджер
источник
4

Есть 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));

(см. также эту скрипку )

Джон Слегерс
источник
4

Расширение прототипа в JavaScript не может быть хорошей идеей , особенно в профессиональных кодовых базах.

Что вы хотите сделать, это расширить родной Dateкласс:

class MyCustomDate extends Date {

  addDays(days) {
    const date = new MyCustomDate(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
  }
  
}

const today = new MyCustomDate();

const nextWeek = today.addDays(7)

console.log(nextWeek)

Таким образом, если однажды Javascript реализует нативный addDaysметод, вы ничего не сломаете.

Creaforge
источник