logo

Как получить вчерашнюю дату в JavaScript: учёт часовых поясов

Быстрый ответ

Для вычисления даты, соответствующей вчерашнему дню в JavaScript, можно использовать методы getDate() и setDate() следующим образом:

JS
Скопировать код
let yesterday = new Date();
yesterday.setDate(yesterday.getDate() – 1);

Учёт DST и временных зон

В JavaScript особое внимание следует уделять работе с временными зонами и тонкостям перехода на летнее время(DST). Объект Date интерпретирует время как количество миллисекунд, прошедших с начала эпохи Unix (00:00:00 UTC 1 января 1970 года). Текущую дату и время в формате метки времени Unix можно получить с помощью функции Date.now().

Для вычисления вчерашней даты вы можете попробовать отнять 86400000 миллисекунд (количество миллисекунд в сутках) от текущего времени. Но этот подход не учтет возможные DST-изменения. Поэтому предпочтительнее использовать метод setDate(), как показано выше. Так JavaScript самостоятельно обработает эти изменения.

Автоматическое переходы по границам календаря

Объект Date в JavaScript грамотно управляет переходами по границам календаря, например, с последнего дня месяца на первое число следующего месяца или с 31 декабря на 1 января нового года. Методы getDate() и setDate() позволяют автоматически управлять такими граничными случаями.

Форматирование даты вчерашнего дня

Для вывода даты вчерашнего дня в формате YYYY-MM-DD можно использовать метод toISOString() и последующее разделение строки:

JS
Скопировать код
let yesterday = new Date();
yesterday.setDate(yesterday.getDate() – 1);
let formattedDate = yesterday.toISOString().split('T')[0];

Использование библиотек при сложных расчётах дат

Если вам нужны более сложные расчеты дат, учет различных временных зон или DST, стоит воспользоваться специализированными библиотеками, такими как Luxon, date-fns или moment.js. Этот инструментарий предназначен для работы с датами и предлагает расширенные возможности управления временем, включая поддержку различных временных зон.

Визуализация

Предлагаем вместе отправиться в небольшое путешествие во времени с помощью JavaScript:

JS
Скопировать код
const today = new Date();
const yesterday = new Date(today.getTime() – (24 * 60 * 60 * 1000));

Итог нашего путешествия во времени:

До: [📅 Сегодня: 2023-04-03] После: [📅 Вчера: 2023-04-02]

Мы вернулись на один день назад! 🚀

Важность точности

Приведенный выше метод с использованием вычитания 86400000 миллисекунд подходит в большинстве случаев. Однако тегий подход не обговешивает переход на летнее/зимнее время, когда продолжительность суток может быть не ровно 24 часа. Если точность времени для вас важна, используйте метод из раздела «Быстрый ответ». Объект Date JavaScript знает, как учитывать разницу в продолжительности дней в зависимости от временной зоны и DST.

Метод "в одну строку" с использованием IIFE и стрелочных функций

Любители компактных решений могут использовать немедленно вызываемое функциональное выражение (IIFE) в комбинации со стрелочной функцией для получения короткого решения:

JS
Скопировать код
const yesterday = (() => {
  const d = new Date();
  d.setDate(d.getDate() – 1);
  return d.toISOString().split('T')[0];
})();

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

Полезные материалы

  1. Полный обзор объекта Date в JavaScript на W3Schools.
  2. Подробное описание объекта Date в JavaScript на MDN Web Docs.
  3. Дата и время в JavaScript на JavaScript.info: легкое для понимания объяснение и примеры работы с датами и временем.
  4. Спецификация языка ECMAScript 2021: официальная спецификация для объектов даты и времени.
  5. Ответы на Stack Overflow по вычитанию дат в JavaScript: проверенные сообществом решения.
  6. Подробное руководство о работе с датами в JavaScript на сайте CSS-Tricks.
  7. Github Gist – Шорткаты в JavaScript для расчёта дат: набор полезных фрагментов кода.