javascript42
Главная
Все учебники
Блог
Учебник Date-fns
Введение
Что такое date-fns и зачем она нужна
История создания библиотеки
Философия и принципы проектирования
Сравнение с Moment.js и другими библиотеками
Преимущества функционального подхода
Модульность и tree-shaking
Установка и настройка
Установка через npm и yarn
Подключение через CDN
Настройка webpack и rollup
Импорт функций и оптимизация сборки
Работа с TypeScript
Настройка локализации
Основы работы с датами
Создание объектов Date
Валидация дат с isValid
Сравнение дат
Проверка корректности даты
Работа с timestamp
Понятие Unix-времени
Форматирование дат
Функция format и её синтаксис
Токены форматирования
Форматирование даты и времени
Локализованное форматирование
Пользовательские форматы
Форматирование относительного времени с formatDistance
formatRelative для контекстного отображения
formatDistanceStrict для точных интервалов
formatDistanceToNow и formatDistanceToNowStrict
formatDuration для временных интервалов
Парсинг дат
Функция parse и её параметры
Строгий парсинг с parseISO
Парсинг JSON-дат
Обработка пользовательского ввода
Парсинг с учетом локали
Работа с неоднозначными датами
Обработка ошибок парсинга
Манипуляции с датами
Добавление времени: add и addDays, addMonths, addYears
Вычитание времени: sub и производные функции
Работа с часами, минутами, секундами
Установка компонентов даты: set, setYear, setMonth
Округление дат: startOfDay, endOfDay
startOf и endOf для различных периодов
Работа с началом и концом недели, месяца, года
Вычисление разницы между датами
Функция differenceIn и её варианты
Разница в днях, часах, минутах
Разница в месяцах и годах
Учет часовых поясов при вычислении разницы
Точные и приблизительные вычисления
Работа с отрицательными интервалами
Работа с интервалами
Создание интервалов
Проверка вхождения даты в интервал: isWithinInterval
Пересечение интервалов: areIntervalsOverlapping
Длительность интервала: intervalToDuration
Разбиение интервалов на периоды: eachDayOfInterval
eachWeekOfInterval и eachMonthOfInterval
Валидация интервалов
Операции сравнения
isEqual для точного сравнения
isBefore и isAfter
isSameDay, isSameWeek, isSameMonth
isSameYear и другие варианты
isWithinInterval для проверки диапазонов
Сравнение с учетом времени и без
compareAsc и compareDesc для сортировки
Работа с неделями
Получение номера недели: getWeek
getISOWeek для ISO-недель
Начало и конец недели
Настройка первого дня недели
Работа с ISO-неделями
differenceInWeeks и другие функции
Локализация недель
Работа с кварталами
Определение квартала: getQuarter
Начало и конец квартала
Операции с кварталами
Добавление и вычитание кварталов
Сравнение по кварталам
Работа с рабочими днями
Определение рабочих дней
Проверка выходных: isWeekend
Добавление рабочих дней: addBusinessDays
Разница в рабочих днях
Настройка рабочей недели
Учет праздников
Локализация
Подключение локалей
Русская локализация
Форматирование с учетом локали
Перевод названий месяцев и дней недели
Настройка форматов для разных регионов
Создание собственных локалей
Работа с RTL-языками
Часовые пояса
Проблемы с часовыми поясами в JavaScript
Интеграция с date-fns-tz
Конвертация между часовыми поясами
Форматирование с учетом timezone
Работа с UTC
Получение offset часового пояса
Парсинг дат с часовыми поясами
Утилиты и вспомогательные функции
getTime для получения timestamp
getUnixTime для Unix-времени
fromUnixTime для конвертации
toDate для нормализации
Функции проверки: isDate, isValid
closest для поиска ближайшей даты
Работа с массивами дат
Сортировка дат
Поиск минимума и максимума: min, max
Фильтрация массивов дат
Генерация последовательностей дат
Удаление дубликатов
Группировка по периодам
Специфичные функции
Високосные годы: isLeapYear
getDaysInMonth для количества дней
getDaysInYear
getWeeksInMonth
lastDayOfMonth и firstDayOfMonth
Определение последнего дня периода
Работа с миллисекундами
Операции с миллисекундами
Конвертация в другие единицы
Точные вычисления времени
millisecondsToSeconds, millisecondsToMinutes
Обратные конвертации
Округление и нормализация
roundToNearestMinutes
Округление до часов, дней
Нормализация компонентов даты
Работа с граничными случаями
Производительность
Особенности tree-shaking
Оптимизация импортов
Сравнение производительности с нативными методами
Кэширование результатов
Работа с большими объемами дат
Профилирование и бенчмарки
Типизация в TypeScript
Типы date-fns
Работа с дженериками
Типобезопасные операции
Создание типизированных оберток
Интеграция с strict mode
Паттерны использования
Валидация пользовательского ввода
Работа с формами
Календари и планировщики
Системы напоминаний
Логирование и аудит
Отчетность по датам
Миграция с других библиотек
Переход с Moment.js
Замена Date-fns 1.x на 2.x
Отличия в API
Автоматизация миграции
Типичные проблемы и решения
Расширение функциональности
Создание собственных функций
Композиция существующих функций
Написание плагинов
Интеграция со сторонними библиотеками
Обертки для специфичных задач
Отладка и тестирование
Типичные ошибки при работе с датами
Мокирование дат в тестах
Работа с фиксированным временем
Тестирование граничных случаев
Отладка проблем с часовыми поясами
Инструменты для тестирования
Лучшие практики
Избежание мутаций
Консистентность в коде
Обработка null и undefined
Валидация входных данных
Документирование использования дат
Code review checklist
Интеграция с фреймворками
Использование в React
Интеграция с Vue.js
Работа в Angular
Svelte и date-fns
Серверный рендеринг
Использование в Node.js
Альтернативы и дополнения
date-fns-tz для часовых поясов
Сравнение с Day.js
Luxon как альтернатива
Temporal API и будущее работы с датами
Выбор библиотеки под задачу