5

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

16

Я столкнулся с проблемой инкрементации значения даты на один день в JavaScript.

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

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

5 ответ(ов)

1

Если вы хотите добавить один день к текущей дате в JavaScript, вы можете использовать метод setDate(), как показано в вашем коде. Вот как это работает:

var myDate = new Date(); // Создаем новый объект даты с текущей датой

// Добавляем один день к текущей дате
myDate.setDate(myDate.getDate() + 1);

В этом коде мы сначала создаем новый объект даты с помощью new Date(), который содержит текущую дату и время. Затем мы используем myDate.getDate(), чтобы получить текущий день месяца, и добавляем к нему 1. Метод setDate() обновляет день в объекте myDate.

Этот способ корректно обрабатывает ситуацию, когда добавление дня приводит к переходу на следующий месяц или даже год, так как JavaScript автоматически управляет переполнением дат.

0

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

var tomorrow = new Date(today.getTime() + 1000 * 60 * 60 * 24);
0

Конечно! Если вам нужно получить завтрашнюю дату в одной строке на чистом JavaScript, вот как это можно сделать, хотя код выглядит немного "неаккуратно":

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

Результат будет примерно таким:

Thu Oct 12 2017 08:53:30 GMT+0200 (Романтическое летнее время)

Этот код создает новый объект Date, устанавливает дату, добавляя один день к текущей дате, и возвращает результат как объект Date. Обратите внимание, что результат будет передавать вашу текущую временную зону.

0

В приведённом ответе не учитываются корректно дни перехода на летнее/зимнее время. В такие дни количество часов в сутках составляет не 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());

Таким образом, функция правильно обрабатывает даты, которые попадают на дни изменения часов, в отличие от стандартных методов.

0

Всё верно, использование методов .getTime() и .setTime() действительно может быть более безопасным и производительным подходом для манипуляции с датами. Эти методы работают с миллисекундами, что делает их точными и независимыми от браузерной реализации, в то время как методы, такие как .setDate(), могут вести себя непредсказуемо, особенно при попытке установить недопустимые значения (например, 31 февраля).

Ваш код:

const d = new Date();
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)); // МИЛЛИСЕКУНДЫ

Корректно добавляет 24 часа к текущей дате, и это действительно предпочтительный способ работы с временем, особенно если вам нужно избежать проблем с некорректными датами и различиями в реализации в разных браузерах.

Так что в вашем случае использование .getTime() и .setTime() будет наиболее безопасным и уверенным методом для работы со временем.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь