Додайте дні до дати JavaScript


1092

Як додати дні до поточного Dateза допомогою JavaScript. Чи JavaScript має вбудовану функцію на зразок .Net AddDay?

Відповіді:


1208

Ви можете створити його за допомогою: -

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як клас, що змінюється, а не незмінна структура.


17
Спрощено:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Данкан

27
@Duncan Ви впевнені, що це те саме, що вище? Це просто додає 24 години, але один день - це не завжди 24 години . Я думаю, питання полягає в тому, як збільшити частину дати на 1 день, не змінюючи часової частини.
Tamás Bolvári

88
864E5чомусь я вважаю за краще писати 24*60*60у своєму коді :)
Марс Робертсон

62
Хлопці, не використовуйте метод додавання 864E5, оскільки це не потребує різниці в літньому режимі, де дні можуть становити 23 або 25 годин.
sbrbot

12
Для тих із вас, хто турбується про літню економію - не варто. Ці алгоритми змінюють базову дату, а не те, як трактується дата. DST реалізується в геттерах і сеттерах дати - геттери віднімають годину влітку, а сетер додає ту годину назад протягом літа, щоб нормалізувати час. Але тільки при використанні абсолютної години - відносні години не потрібно тлумачити. Ось чому математика дати працює. ІМХО ...
Джерард ОНеіль

754

Правильна відповідь :

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


@bzlm, так по суті те саме. Він просто не змінює прототип дат. Я також хотів вказати на недоліки в головній відповіді.
запчастини

Прийняту відповідь було відредаговано два тижні тому, щоб вказати на її вади. Як ви вважаєте, воно потребує подальшого редагування? Якщо так, то як?
bzlm

7
@bzlm: Так, я вважаю, що в примітці слід писати "цей підхід не вдається, якщо дата" від "не в тому ж році чи місяці , що і поточна дата ". Я все ще переживаю, що користувачі переглянуть відповідь, а не прочитають попередження, оскільки воно не виділяється. Дякую.
запчастини

3
Я думаю, навіть якщо ця робота не є коректною. Не існує такого конструктора для Date: var result = new Date (date); , див. http://www.w3schools.com/js/js_dates.asp . Навіть якщо це зазвичай працює, іноді це може призвести до неправильних результатів через перетворення в рядок і навпаки. Це має бути var результат = нова дата (date.getTime ());
Марцін

2
@AnkitBalyan, Дивіться інші відповіді. Можливо, він працює неправильно через літній час
запчастини

188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Будьте уважні, адже це може бути хитро. Якщо встановити "завтра", воно працює лише тому, що поточне значення відповідає році та місяцю "сьогодні". Однак встановлення номера дати, як-от "32", як правило, все одно буде добре, щоб перенести його на наступний місяць.


1
Так? Але що це? (пройшов 31 березня 2010 р.): сьогодні = нова дата (); завтра = нова дата (); завтра.setDate (сьогодні.getDate () + 1); попередження (завтра.getMonth ()); Каже «3». оповіщення (завтра); правильно ... Чому ???
d -_- b

12
@sims місяць індексується 0. 3-й місяць - квітень
Джоель Куехорн

6
Чому потрібно створити 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

123

Моє просте рішення:

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

це рішення не має проблем із переходом на літній час. Також можна додати / змінити будь-яке зміщення за роки, місяці, дні тощо.

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

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


13
Примітка. Це скидає час до 00:00:00 (може бути проблемою чи ні)
Альваро Гонсалес

Як ви кажете, це не працює в останній день будь-якого місяця. Робить це непридатним 12 днів у році. Звучить як кошмар налагодити !!!
Дрю Ноакс

6
Немає Дрю, він може бути використаний на всі дні у році. Можна встановити зміщення дати більше 31 або зміщення місяця більше 12, і ця функція перерахує його як день у наступному місяці або місяць наступного року. Так, наприклад: nextday = нова дата (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); ідеально добре код.
sbrbot

є getMonth () + 22 - що ви думаєте, чи буде це працювати !?
sbrbot

1
Я погоджуюся, використовую цей спосіб. У нас просто помилка через літній час, тому що ми користувалися setDate.
Джелле

95

Ці відповіді мені здаються заплутаними, я вважаю за краще:

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

getTime () дає нам мілісекунди з 1970 року, а 86400000 - це кількість мілісекунд в день. Отже, мс містить мілісекунди на бажану дату.

Використання мілісекундного конструктора дає потрібний об’єкт дати.


46
Це рішення не враховує економію денного світла. Так, наприклад, це повернеться в ту саму дату, через 23 години: new Date(new Date('11/4/2012').getTime() + 86400000)
Ной Гаррісон

6
@NoahMiller Проблема, яку ви піднімаєте, може бути особливістю, а не помилкою! Додавання 24 годин на день - це іноді правильна річ, метою якої є знати час, що базується на базі DST. Дата повернення вашого прикладу має значення часу 11 вечора 4 листопада, тобто 24 години пізніше саме цього дня. Оригінальний плакат запитав про дату, яка, здавалося б, вказує на деяке прагнення до правильного часу доби. Ця відповідь правильна, якщо ви знаходитесь у тому випадку, коли ваша мета - час через 24 години.
Енді Новоцін

3
Я погоджуюсь Ноа, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000) робить те, що говорить, додає до дати цілий день вартості кліщів.
Corey Alix

6
Це абсолютно правильно для деяких випадків (наприклад, для одноденних файлів cookie) та більш простого рішення, ніж більшість інших. Я не розумію, чому у нього так багато подій та так мало оновлень: /
Matmarbon

48

Спробуйте

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

Використовуючи setDate () для додавання дати, щоб вирішити вашу проблему, спробуйте додати кілька днів до місяця лютого, якщо ви спробуєте додати до нього нові дні, це не призведе до того, що ви очікували.


26
Ні, це не повинно бути позначено як правильну відповідь, оскільки це рішення передбачає, що кожен день має 24 * 60 * 60 * 1000 секунд, але це не так (літній час)!
sbrbot

Будь-які докази щодо проблеми "лютого" setDate()? Є чи це так: stackoverflow.com/questions/5497637 / ...
nobar

9
+1 ЦЕ ПОТРІБНО позначити як правильну відповідь. Я вважаю, що "перехід на літній день" - це презентація, а не цінність , яка є лише кількістю мілісекунд. З значення -точка зору - день ФІКС кількість мілісекунди, в той час як з точки зору презентації може відрізнятися.
зневірився

1
@ disfated - це не правильна відповідь. У день, що перебуває у режимі літнього часу, є 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);

Цей матеріал сьогодні / завтра бентежить. Встановивши поточну дату в нову змінну дати, ви зіпсуєте значення року. якщо ви працюєте з початкової дати, ви не будете.


7
Читаючи всі відповіді навколо, поки я не знайду тут цю перлину. Тепер це має сенс. Дивовижно, що річ сьогодні / завтра була скопійована майже у всіх відповідях, коли це взагалі не має сенсу, і це не "для читальності та ясності", як автор говорить у найбільш схваленій відповіді - в найбільш схвальному коментарі, - це заплутано і погана практика, і неправильна
Сеск

23

Якщо можете, використовуйте moment.js . У JavaScript не дуже хороші методи рідної дати та часу. Далі наведено приклад синтаксису Моменту:

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/#/manipulating/add/


1
@ kpull1 запитувач не обмежував домен рішення, запитуючи, чи існує вбудоване рішення.
користувач2910265

4
Сучасна примітка: Moment.js надзвичайно важко додати для такої невеликої мети. Це кілька сотень КБ, і це не зручно для веб-упаковки.
Джошуа Комео

1
Наша бажана бібліотека - дата-fns. Зручний для веб-упаковки швидкий та вважає Дати непорушними.
Freewalker

1
@LukeWilliams досі не чув про дата-fns. перевіримо це. Дякую.
користувач2910265

2
@JoshuaComeau Якщо ви завантажите його з cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , він займає 53 248 байт на диску. Я думаю, що це вся куля, але я не знаю. У всякому разі. Це не велика справа.
птахів

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
Заявка на те, що не потрібно проміжної змінної дати.
Джефф Лоурі

це найкраща відповідь, оскільки у нього немає мутації
knocte

Не кожен день має 24 години, він виходить з ладу за DST і стрибає секунди.
Стефан

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

7
Метод .addDays () не працює для дат, які перетинають межі літнього часу.
mskfisher

1
Це одна з кращих відповідей тут, тому що ви (правильно) використовуєте кількість мілісів з епохи для представлення дат / часів та додавання кількості мілісів для коригування ... Чому тоді ви не продовжували це "addMonths"! ? І чому не додавати рік? Вам набридло?
Робін

Крім місяців, періоди часу можуть бути представлені статичними числами. Але місяці можуть бути чотирьох різної тривалості. Крім того, будь-яка тривалість періоду від Days і вище може мати змінну довжину в DST, тому ви більше не можете використовувати додавання на основі часу без іншого рівня складності. Я додав addYears () і виправив addMonths ().
Суамер

14

Не використовуючи другу змінну, ви можете замінити 7 на наступні x дні:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

14

до субстративної використання 30 днів (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)


Намагаючись обчислити час дати, завжди пам’ятайте про цей час, виходячи з мілісекунд в інформатиці, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) нова дата (+ вашDate + 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);


Я думаю, що це найкраще рішення. Якщо ми розширюємо клас Date, то краще матиме сенс, що екземпляр Date сам оновлюється.
Порлуне

10

Дякую Джейсону за вашу відповідь, яка працює, як очікувалося, ось суміш з вашого коду та зручного формату AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6
Він не враховує економію літнього часу, коли в день більше або менше 86400000 секунд, і це може призвести до логічної помилки (програмної помилки) у вашому коді.
sbrbot

Іноді це потрібно. API eBay має аукціони на два дні, які базуються на цілодобовій основі, тому ваш товар закінчиться в інший час, ніж він піднімається, якщо статус DST зміниться в середині аукціону. У цьому випадку вам потрібно використовувати цей тип функції, щоб уникнути логічних помилок.
Енді Новоцін

10

Пізно на вечірку, але якщо ви користуєтеся, jQueryто тут є чудовий плагін під назвою Moment:

http://momentjs.com/

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

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

І багато інших хороших речей там!

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


1
момент не потрібен jQuery :)
aikeru

Ще краще в такому випадку !!
ЗауваженняЛіма

1
Так, після того, як довгий час поспішав з Plain ol 'JS, я використовував Момент, і він просто працює (тм)!
caseyamcl

Чому ви хочете використовувати плагін, коли буде виконано кілька рядків JS?
френчі

@frenchie, тому що, починаючи з кількох рядків JS, і тому що, очевидно, ваша програма маніпулює інформацією про дні, дати та час, незабаром буде декілька 1000 рядків JS, то вам буде запропоновано локалізувати додаток у всій 12 мов та часових поясів, і ви хотіли б, щоб ви почали з чогось подібного моменту;)
RemarkLima

10

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

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

Якщо вам потрібна додаткова функціональність, пропоную заглянути в бібліотеку дат-фнів .


8

Старий я знаю, але іноді мені подобається таке:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

2
Цей має для мене найбільше сенсу. Це просто, елегантно і не піддається молитвам, які рухаються протягом місяців / років.
uadrive

1
Найпростіша відповідь представлена. Спираючись на це, прототип 'addDays' буде таким:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974,

Не кожен день має 24 години, він виходить з ладу за DST і стрибає секунди.
Стефан

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;

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 закінчився DST.

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

Якщо ви хочете затримати час через DST (тому 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);
}

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, який робить те ж саме, не створюючи нового об'єкта Дата.

Що ми робимо тут, це перетворити дні в мілісекунди і додати це значення до значення, яке надає getTime. Нарешті, ми даємо результат конструктору Date (мілісекунд) або методу setTime (мілісекунд).


Не кожен день має 24 години, він виходить з ладу за DST і стрибає секунди.
Стефан

Стефане, чи є якась ще бібліотека для цього?
Вахтанг

now.setDate(now.getDate() + days);автоматично обробляє зміни DST. І я повинен виправити, високосні секунди ігноруються в часових мітках 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 ...


дотримуючись цієї логіки, ви також можете додати один день;)d.setDate(d.getDate() + 1);
Rivenfall


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

(див. також цей Fiddle )


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метод, ви нічого не порушите.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.