В экосистеме JavaScript время представляется объектом
Date, который хранит количество миллисекунд с начала
Unix-эпохи (1970-01-01T00:00:00Z). Несмотря на кажущуюся простоту,
работа с временем осложняется несколькими факторами:
Date через методы
set*;Под фиксированным временем в прикладной разработке обычно понимается подход, при котором момент времени рассматривается как неизменяемая точка на временной оси, не зависящая от локального контекста и не подверженная побочным изменениям при операциях над датами.
Библиотека date-fns реализует функциональный подход, при котором
операции над датами возвращают новые экземпляры Date,
исключая мутацию исходного значения.
date-fns строится вокруг следующих принципов:
Date;Date: без
собственных классов даты;Пример базового подхода:
import { addDays } from 'date-fns';
const now = new Date();
const tomorrow = addDays(now, 1);
Исходный now не изменяется, что критично для
фиксированного времени.
Фиксация времени начинается с корректного создания базовых значений.
ISO-8601 является наиболее стабильным форматом представления даты:
import { parseISO } from 'date-fns';
const date = parseISO('2026-05-22T10:15:00Z');
Особенности:
Z фиксирует UTC;Unix-время является одной из наиболее устойчивых форм фиксации времени:
import { fromUnixTime } from 'date-fns';
const date = fromUnixTime(1716360000);
Преимущества:
const now = new Date();
Несмотря на простоту, такое значение не является фиксированным в контексте бизнес-логики без дополнительной нормализации.
Одним из ключевых инструментов работы с фиксированным временем является приведение даты к стандартным границам.
import { startOfDay, startOfHour, startOfMinute } from 'date-fns';
const day = startOfDay(new Date());
const hour = startOfHour(new Date());
const minute = startOfMinute(new Date());
Результаты:
import { endOfDay, endOfHour } from 'date-fns';
const endDay = endOfDay(new Date());
const endHour = endOfHour(new Date());
Используется для диапазонных операций:
Для фиксирования времени часто требуется точечная настройка отдельных компонентов.
setimport { set } from 'date-fns';
const fixed = set(new Date(), {
year: 2026,
month: 4, // май (0-индексация)
date: 22,
hours: 10,
minutes: 0,
seconds: 0,
milliseconds: 0
});
Особенности:
import { setHours, setMinutes } from 'date-fns';
const time = setHours(new Date(), 9);
const finalTime = setMinutes(time, 30);
Такая композиция позволяет формировать детерминированные временные шаблоны.
Одним из наиболее надежных способов работы с фиксированным временем является использование UTC.
const utcDate = new Date(Date.UTC(2026, 4, 22, 10, 0, 0));
или форматирование:
import { formatISO } from 'date-fns';
const iso = formatISO(new Date());
Преимущества UTC-подхода:
Фиксированное время требует точных операций сравнения.
import { isEqual } from 'date-fns';
isEqual(dateA, dateB);
Сравнение происходит по миллисекундам.
import { isBefore, isAfter } from 'date-fns';
isBefore(dateA, dateB);
isAfter(dateA, dateB);
Используются для:
import { compareAsc } from 'date-fns';
const sorted = dates.sort(compareAsc);
Возвращает:
-1 если первая дата раньше;1 если позже;0 если равны.Unix timestamp является фундаментом фиксированного времени.
const timestamp = Date.now();
или:
const timestamp = new Date().getTime();
Преобразование:
import { getTime } from 'date-fns';
const ms = getTime(new Date());
Использование:
date-fns избегает мутаций:
const original = new Date();
const modified = setHours(original, 12);
original сохраняет исходное значение.
Это устраняет типичные ошибки:
import { startOfDay } from 'date-fns';
const eventDate = startOfDay(parseISO('2026-05-22T18:45:00Z'));
Используется для группировки событий по календарным дням.
import { addDays, setHours } from 'date-fns';
const deadline = setHours(addDays(new Date(), 7), 23);
Формирует стабильную границу выполнения задачи.
import { isWithinInterval } from 'date-fns';
isWithinInterval(new Date(), {
start: startOfDay(new Date()),
end: endOfDay(new Date())
});
При работе с фиксированным временем необходимо учитывать:
Date;getHours, setHours зависят от
окружения;Поэтому:
Date через встроенные методы;== или ===;date-fns позволяет выстраивать цепочки преобразований:
import { parseISO, startOfDay, addDays, setHours } from 'date-fns';
const result = setHours(
addDays(
startOfDay(parseISO('2026-05-22T10:00:00Z')),
3
),
12
);
Каждый шаг возвращает новое значение, формируя предсказуемую временную модель без побочных эффектов.