Как получить вчерашнюю дату в JavaScript: учёт часовых поясов
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для вычисления даты, соответствующей вчерашнему дню в JavaScript, можно использовать методы getDate()
и setDate()
следующим образом:
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()
и последующее разделение строки:
let yesterday = new Date();
yesterday.setDate(yesterday.getDate() – 1);
let formattedDate = yesterday.toISOString().split('T')[0];
Использование библиотек при сложных расчётах дат
Если вам нужны более сложные расчеты дат, учет различных временных зон или DST, стоит воспользоваться специализированными библиотеками, такими как Luxon, date-fns или moment.js. Этот инструментарий предназначен для работы с датами и предлагает расширенные возможности управления временем, включая поддержку различных временных зон.
Визуализация
Предлагаем вместе отправиться в небольшое путешествие во времени с помощью JavaScript:
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) в комбинации со стрелочной функцией для получения короткого решения:
const yesterday = (() => {
const d = new Date();
d.setDate(d.getDate() – 1);
return d.toISOString().split('T')[0];
})();
Эта функция исполняется непосредственно и возвращает отформатированную дату, минимизирует побочные эффекты и уменьшает объем кода.
Полезные материалы
- Полный обзор объекта Date в JavaScript на W3Schools.
- Подробное описание объекта Date в JavaScript на MDN Web Docs.
- Дата и время в JavaScript на JavaScript.info: легкое для понимания объяснение и примеры работы с датами и временем.
- Спецификация языка ECMAScript 2021: официальная спецификация для объектов даты и времени.
- Ответы на Stack Overflow по вычитанию дат в JavaScript: проверенные сообществом решения.
- Подробное руководство о работе с датами в JavaScript на сайте CSS-Tricks.
- Github Gist – Шорткаты в JavaScript для расчёта дат: набор полезных фрагментов кода.