Работа с датами в TypeScript: обзор библиотек
Работа с датами — одна из самых частых задач в веб-разработке. В TypeScript (и JavaScript) встроенный объект Date имеет ограниченные возможности и неудобный API. К счастью, существует множество библиотек, которые упрощают форматирование, парсинг, сравнение и манипуляцию датами. В этой статье мы рассмотрим четыре популярные библиотеки: date-fns, Day.js, Luxon и Moment.js, и покажем примеры их использования в TypeScript.
1. date-fns — модульная и лёгкая
date-fns — это современная библиотека, построенная на принципе модульности. Вы импортируете только те функции, которые нужны, что позволяет держать размер бандла минимальным. date-fns отлично поддерживает TypeScript из коробки.
Установка:
npm install date-fns
# или
yarn add date-fns
Примеры использования:
import { format, addDays, differenceInDays, parseISO } from 'date-fns';
// Форматирование
const today = new Date();
console.log(format(today, 'yyyy-MM-dd')); // 2025-03-15
// Добавление дней
const future = addDays(today, 10);
console.log(format(future, 'dd.MM.yyyy')); // 25.03.2025
// Разница между датами
const start = parseISO('2025-01-01');
const end = parseISO('2025-03-15');
console.log(differenceInDays(end, start)); // 73
// Проверка на выходные
import { isWeekend } from 'date-fns';
console.log(isWeekend(new Date(2025, 2, 15))); // true (суббота)
2. Day.js — лёгкая альтернатива Moment.js
Day.js — это минималистичная библиотека (всего 2 кБ) с API, очень похожим на Moment.js. Она идеальна, если вы хотите мигрировать с Moment, но уменьшить размер бандла. Day.js поддерживает TypeScript через типы.
Установка:
npm install dayjs
# или
yarn add dayjs
Примеры использования:
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import utc from 'dayjs/plugin/utc';
dayjs.extend(relativeTime);
dayjs.extend(utc);
// Создание и форматирование
const now = dayjs();
console.log(now.format('DD/MM/YYYY HH:mm')); // 15/03/2025 14:30
// Относительное время
console.log(dayjs('2025-03-10').fromNow()); // 5 days ago
// Работа с UTC
const utcDate = dayjs.utc('2025-03-15T12:00:00Z');
console.log(utcDate.local().format('HH:mm')); // локальное время
// Манипуляции
const nextMonth = dayjs().add(1, 'month');
console.log(nextMonth.format('MMMM YYYY')); // April 2025
3. Luxon — мощный и современный
Luxon — это наследник Moment.js, разработанный той же командой. Он использует нативный объект DateTime, поддерживает часовые пояса, интервалы и длительности. Luxon написан на TypeScript и имеет отличную типизацию.
Установка:
npm install luxon
# или
yarn add luxon
Примеры использования:
import { DateTime, Interval, Duration } from 'luxon';
// Создание и форматирование
const dt = DateTime.now();
console.log(dt.toFormat('yyyy LLL dd')); // 2025 Mar 15
// Часовые пояса
const ny = DateTime.now().setZone('America/New_York');
console.log(ny.toLocaleString(DateTime.DATETIME_FULL)); // March 15, 2025 at 9:30 AM EDT
// Интервалы
const start = DateTime.fromISO('2025-01-01');
const end = DateTime.fromISO('2025-03-15');
const interval = Interval.fromDateTimes(start, end);
console.log(interval.length('days')); // 73
// Длительности
const dur = Duration.fromObject({ hours: 5, minutes: 30 });
console.log(dur.toHuman()); // 5 hours, 30 minutes
// Парсинг сложных форматов
const parsed = DateTime.fromFormat('15.03.2025 14:30', 'dd.MM.yyyy HH:mm');
console.log(parsed.toISODate()); // 2025-03-15
4. Moment.js — классика (но с оговорками)
Moment.js долгое время была стандартом де-факто для работы с датами. Однако
Также в библиотеке
Respect/Validation для PHP: полное руководство с примерами
prometheus/client_golang для Go: полное руководство с примерами
Управление конфигурацией TypeScript-приложений: полное руководство
Apache POI для Java: полное руководство с примерами
Реактивное программирование в Rust: библиотеки, фреймворки и практические примеры