Мне нужно увеличить значение даты на один день в JavaScript.
Например, у меня есть значение даты 2010-09-11, и мне нужно сохранить дату следующего дня в переменной JavaScript.
Как я могу увеличить дату на день?
javascript
date
datetime
Santanu
источник
источник
Ответы:
Три варианта для вас:
1. Используя только
Date
объект JavaScript (без библиотек):Мой предыдущий ответ на вопрос № 1 был неправильным (он добавил 24 часа, не учитывая переходы на летнее время и обратно; Clever Human указал, что он потерпит неудачу с 7 ноября 2010 года в восточном часовом поясе). Вместо этого ответ Jigar - правильный способ сделать это без библиотеки:
Это работает даже в последний день месяца (или года), потому что объект даты в JavaScript хорош для ролловера:
Показать фрагмент кода
(Этот ответ в настоящее время принят, поэтому я не могу удалить его. Прежде чем он был принят, я предложил ОП, чтобы они приняли Jigar, но, возможно, они приняли этот для пунктов № 2 или № 3 в списке.)
2. Использование MomentJS :
(Остерегайтесь того, что он
add
изменяет экземпляр, который вы вызываете, вместо того, чтобы возвращать новый экземпляр, поэтомуtoday.add(1, 'days')
измените егоtoday
. Вот почему мы начинаем с операции клонированияvar tomorrow = ...
.)3. Использование DateJS , но оно не обновлялось долгое время:
источник
Date
конструктор (new Date(year, month, date)
); см. раздел 15.9.2.1 спецификации ; если вы хотите принять ряд форматов, обязательно посмотрите на DateJS .Date.parse
(который возвращает количество миллисекунд, которые вы можете затем передатьnew Date(ms)
). Но будьте осторожны, это может варьироваться от браузера к браузеру. До недавнего времени реализации могли делать практически все, что хотелиDate.parse
. Новая спецификация 5-го издания теперь имеет минимальный формат, который должен быть принят, но я бы пока на это не рассчитывал.x = new Date(); x2 = new Date(x.getTime() + 1000)
, где 1000 - это приращение в миллисекунду.Date
объекты изменчивы. Вы храните один и тот жеDate
объект три раза в массиве. Если вы хотите три разныхDate
объекта, вы должны создать три объекта:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
источник
new Date("2009-09-11")
а Firefox - нет. Я думаю, что большинство браузеров согласны сnew Date("2009/09/11")
таким простым решениемvar arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.-
на/
и надежда на то, что браузеры примут его, состоял бы в том, чтобы разделить строку на части:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
обратите внимание, что мы используемm-1
здесь, потому что месяцы javascript - это значения enum (январь равен 0, а не 1), иd+1
потому что мы выполняем приращение уже в начальном назначении (оно будет автоматически исправлено 29 февраля и т. д.)Кажется, что ни один из примеров в этом ответе не работает с днями перехода на летнее время. В эти дни количество часов в дне не 24 (это 23 или 25, в зависимости от того, «прыгаете ли вы вперед» или «отступаете»).
Приведенная ниже функция JavaScript AddDays учитывает переход на летнее время:
Вот тесты, которые я использовал для проверки функции:
источник
Самый простой способ - преобразовать в миллисекунды и добавить 1000 * 60 * 60 * 24 миллисекунд, например:
источник
1000*60*60*24
хDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
но на самом деле это похоже наgetTime()
/setTime()
, на самом деле.new Date(Date.now()+1000*60*60*24);
Завтра в одной строке в чистом JS, но это безобразно !
Вот результат:
источник
Сначала вам нужно проанализировать вашу строку, прежде чем следовать советам других людей:
Если вы хотите вернуть его в тот же формат, вам придется сделать это «вручную»:
Но я предлагаю получить Date.js , как указано в других ответах, которые помогут вам много .
источник
Я чувствую, что нет ничего безопаснее, чем
.getTime()
и.setTime()
, так что это должно быть лучше, а также производительность..setDate()
Недопустимая дата (например, 31 + 1) слишком опасна и зависит от реализации браузера.источник
Получение следующих 5 дней:
источник
Два метода:
1:
2: аналогично предыдущему методу
источник
Получить строковое значение даты , используя dateObj.toJSON () метод Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Slice дату с возвращаемым значение, а затем увеличить на количество дней, которые вы хотите.
источник
пример
Результат
источник
Не совсем уверен, что это ошибка (протестировано Firefox 32.0.3 и Chrome 38.0.2125.101), но следующий код не будет работать в Бразилии (-3 по Гринвичу):
Результат:
Добавление одного часа к дате, заставит его работать отлично (но не решит проблему).
Результат:
источник
Результатом является строковое представление завтрашней даты. Используйте new Date (), чтобы получить сегодняшнюю дату, добавив один день, используя Date.getDate () и Date.setDate (), и преобразовав объект Date в строку.
источник
Увеличение даты года с ванильным js:
На всякий случай, если кто-то хочет увеличить другое значение, кроме даты (дня)
источник
Через нативный JS, чтобы добавить один день, вы можете сделать следующее:
Другой вариант - использовать
moment
библиотеку:источник
Увеличение даты с учетом часового пояса / перехода на летнее время для дат JavaScript:
источник