Работа с датами в JavaScript — одна из самых частых причин багов: разные часовые пояса, форматирование, сравнение дат, прибавление дней и ошибки на границах месяцев. Разберёмся, что использовать на практике: Date, Intl и date-fns.
Date — базовый инструмент JavaScript
Объект Date встроен в язык и подходит для хранения времени, получения текущей даты и простых операций.
Примеры задач:
- получить текущую дату:
new Date() - распарсить ISO-строку:
new Date('2025-06-26T12:00:00Z') - получить timestamp:
Date.now()
Но есть нюансы:
- месяцы в конструкторе начинаются с
0 - строки без таймзоны могут интерпретироваться по-разному
- методы вроде
setDate()мутируют объект
Из-за этого Date удобен как низкоуровневая основа, но не всегда хорош для бизнес-логики.
Intl — правильное форматирование для пользователей 🌍
Если нужно красиво показать дату в нужной локале, лучший выбор — Intl.DateTimeFormat.
Пример:
new Intl.DateTimeFormat('ru-RU', {
day: '2-digit',
month: 'long',
year: 'numeric'
}).format(new Date())
Плюсы Intl:
- локализация без ручной сборки строк
- поддержка часовых поясов
- форматирование дат и времени по стандартам региона
Это особенно важно для интерфейсов, где дата должна выглядеть привычно для пользователя.
date-fns — удобная библиотека для операций с датами 📦
Когда нужно прибавлять дни, сравнивать даты, вычислять разницу или форматировать в коде приложения, date-fns сильно упрощает жизнь.
Популярные функции:
addDays(date, 7)— добавить 7 днейformat(date, 'dd.MM.yyyy')— форматировать датуisBefore(a, b)— сравнить датыdifferenceInDays(a, b)— узнать разницу
Почему date-fns часто выбирают:
- функции не мутируют исходную дату
- модульный подход
- понятный API
- хорошая читаемость кода ✨
Что использовать в реальных проектах
Практичный подход такой:
Date— хранение, timestamp, базовые операцииIntl— отображение даты пользователюdate-fns— вычисления, сравнения, бизнес-логика
Полезные рекомендации 🔧
- храните даты в ISO 8601:
2025-06-26T12:00:00Z - явно учитывайте часовой пояс
- не форматируйте даты вручную через строки
- не полагайтесь на неоднозначный парсинг
- тестируйте кейсы: конец месяца, високосный год, переходы времени
Главный вывод: если использовать только Date, код быстро становится хрупким. Связка Date + Intl + date-fns даёт более предсказуемую, понятную и поддерживаемую работу с датами в JavaScript 🚀
📌 В конце дня именно даты часто ломают логику продукта, поэтому аккуратная работа с ними — признак зрелой frontend- и backend-разработки.
Заодно стоит посмотреть подборку каналов про IT — там много полезного по JavaScript, архитектуре и практике разработки.