Увеличение даты в JavaScript - PullRequest
       25

Увеличение даты в JavaScript

363 голосов
/ 09 сентября 2010

Мне нужно увеличить значение даты на один день в JavaScript.

Например, у меня есть значение даты 2010-09-11, и мне нужно сохранить дату следующего дня в переменной JavaScript.

Как мне увеличить дату на день?

Ответы [ 14 ]

665 голосов
/ 09 сентября 2010

Три варианта для вас:

1. Использование только объекта JavaScript Date (без библиотек):

Мой предыдущий ответ на вопрос № 1 был неверным (он добавил 24 часа, не учитывая переходы на летнее и летнее время; Умный человек указал, что с 7 ноября 2010 г. он потерпит неудачу в Восточный часовой пояс). Вместо этого ответ Джигара является правильным способом сделать это без библиотеки:

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

Это работает даже в последний день месяца (или года), потому что объект даты в JavaScript подходит для ролловера:

var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

(Этот ответ в настоящее время принят, поэтому я не могу удалить его. Перед тем, как он был принят, я предложил ОП, чтобы они приняли Jigar, но, возможно, они приняли этот для пунктов № 2 или № 3 в списке .)

2. Использование MomentJS :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(Остерегайтесь того, что add изменяет экземпляр, который вы вызываете, вместо того, чтобы возвращать новый экземпляр, поэтому today.add(1, 'days') изменит today. Вот почему мы начинаем с операции клонирования var tomorrow = ....)

3. Использование DateJS , но оно долгое время не обновлялось:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
157 голосов
/ 09 сентября 2010
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
30 голосов
/ 22 апреля 2011

Ни один из примеров в этом ответе не работает с днями перехода на летнее время. В эти дни количество часов в дне не 24 (это 23 или 25, в зависимости от того, «прыгаете» или «падаете»).

Приведенная ниже функция JavaScript AddDays учитывает переход на летнее время:

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

Вот тесты, которые я использовал для проверки функции:

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());
24 голосов
/ 17 декабря 2015

Самый простой способ - преобразовать в миллисекунды и добавить 1000 * 60 * 60 * 24 миллисекунд, например:

.
var tomorrow = new Date(today.getTime()+1000*60*60*24);
16 голосов
/ 11 октября 2017

Завтра в одной строке в чистом JS, но это безобразно !

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

Вот результат:

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
11 голосов
/ 09 сентября 2010

Сначала вам нужно проанализировать вашу строку перед тем, как последовать совету других людей:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

Если вы хотите вернуть его в тот же формат, вам придется сделать это «вручную»:

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

Но я предлагаю получить Date.js, как упоминалось в других ответах, который поможет вам много .

2 голосов
/ 10 июля 2017

Два метода:

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2: аналогично предыдущему методу

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
2 голосов
/ 31 января 2016

Получение следующих 5 дней:

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
1 голос
/ 19 марта 2016

Получите строковое значение даты, используя метод dateObj.toJSON (). Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Вырежьте дату из возвращенного значения и затем увеличьте на необходимое количество дней.

0 голосов
/ 31 января 2019

Год увеличения даты с ванильным js:

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

На всякий случай, если кто-то захочет увеличить значение, отличное от даты (дня)

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