Увеличение даты в JavaScript
Я столкнулся с проблемой инкрементации значения даты на один день в JavaScript.
У меня есть дата в формате 2010-09-11
, и мне нужно сохранить значение следующего дня в переменной JavaScript.
Как я могу увеличить дату на один день?
5 ответ(ов)
Если вы хотите добавить один день к текущей дате в JavaScript, вы можете использовать метод setDate()
, как показано в вашем коде. Вот как это работает:
var myDate = new Date(); // Создаем новый объект даты с текущей датой
// Добавляем один день к текущей дате
myDate.setDate(myDate.getDate() + 1);
В этом коде мы сначала создаем новый объект даты с помощью new Date()
, который содержит текущую дату и время. Затем мы используем myDate.getDate()
, чтобы получить текущий день месяца, и добавляем к нему 1. Метод setDate()
обновляет день в объекте myDate
.
Этот способ корректно обрабатывает ситуацию, когда добавление дня приводит к переходу на следующий месяц или даже год, так как JavaScript автоматически управляет переполнением дат.
Самый простой способ — это конвертировать дату в миллисекунды и добавить 1000 * 60 * 60 * 24 миллисекунд, например:
var tomorrow = new Date(today.getTime() + 1000 * 60 * 60 * 24);
Конечно! Если вам нужно получить завтрашнюю дату в одной строке на чистом JavaScript, вот как это можно сделать, хотя код выглядит немного "неаккуратно":
new Date(new Date().setDate(new Date().getDate() + 1))
Результат будет примерно таким:
Thu Oct 12 2017 08:53:30 GMT+0200 (Романтическое летнее время)
Этот код создает новый объект Date
, устанавливает дату, добавляя один день к текущей дате, и возвращает результат как объект Date
. Обратите внимание, что результат будет передавать вашу текущую временную зону.
В приведённом ответе не учитываются корректно дни перехода на летнее/зимнее время. В такие дни количество часов в сутках составляет не 24 (в зависимости от того, происходит ли "прыжок вперёд" или "падение назад", это 23 или 25).
Вот функция addDays
на JavaScript, которая учитывает переход на летнее/зимнее время:
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());
Таким образом, функция правильно обрабатывает даты, которые попадают на дни изменения часов, в отличие от стандартных методов.
Всё верно, использование методов .getTime()
и .setTime()
действительно может быть более безопасным и производительным подходом для манипуляции с датами. Эти методы работают с миллисекундами, что делает их точными и независимыми от браузерной реализации, в то время как методы, такие как .setDate()
, могут вести себя непредсказуемо, особенно при попытке установить недопустимые значения (например, 31 февраля).
Ваш код:
const d = new Date();
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)); // МИЛЛИСЕКУНДЫ
Корректно добавляет 24 часа к текущей дате, и это действительно предпочтительный способ работы с временем, особенно если вам нужно избежать проблем с некорректными датами и различиями в реализации в разных браузерах.
Так что в вашем случае использование .getTime()
и .setTime()
будет наиболее безопасным и уверенным методом для работы со временем.
Сравнение двух дат в JavaScript
Где найти документацию по форматированию даты в JavaScript?
Как преобразовать дату в UTC?
Как рассчитать количество дней между двумя заданными датами
Как вывести дату в стандартном формате?