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

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

889 голосов
/ 19 февраля 2009

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

Ответы [ 40 ]

13 голосов
/ 17 июня 2016

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

 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);
8 голосов
/ 03 октября 2014

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

http://momentjs.com/

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

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

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

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

8 голосов
/ 04 апреля 2019

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

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
7 голосов
/ 13 декабря 2014

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

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}
7 голосов
/ 04 сентября 2012

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

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}
6 голосов
/ 25 ноября 2016

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

Используя 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;
}
6 голосов
/ 15 октября 2014

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

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

timeObject.setDate(timeObject.getDate() + countOfDays);
6 голосов
/ 05 июня 2014

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

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);
}
6 голосов
/ 29 сентября 2012

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

SETDATE ()

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...