Интервалы в date-fns представляют собой базовую структуру для работы с временными диапазонами. В большинстве функций используется объект с двумя обязательными свойствами: началом и концом периода. Такая модель позволяет унифицировано описывать любые временные отрезки — от секунд до лет.
В библиотеке интервал задаётся простым объектом:
const interval = {
start: new Date(2026, 0, 1),
end: new Date(2026, 0, 10)
};
Ключевые требования к структуре:
start должен быть экземпляром Dateend должен быть экземпляром Datestart не должен быть позже end,
хотя некоторые функции допускают обратный порядокТакой подход делает интервалы совместимыми со всеми утилитами date-fns, работающими с диапазонами времени.
Наиболее прямой способ формирования интервала — явное указание границ:
const interval = {
start: new Date(2026, 4, 1),
end: new Date(2026, 4, 15)
};
При ручном создании важно учитывать:
Для стандартизации границ часто используются функции нормализации:
import { startOfDay, endOfDay } from 'date-fns';
const interval = {
start: startOfDay(new Date(2026, 4, 1)),
end: endOfDay(new Date(2026, 4, 15))
};
В date-fns предусмотрены функции, позволяющие формировать корректные границы временных единиц.
import { startOfDay, endOfDay } from 'date-fns';
const interval = {
start: startOfDay(new Date()),
end: endOfDay(new Date())
};
import { startOfWeek, endOfWeek } from 'date-fns';
const interval = {
start: startOfWeek(new Date()),
end: endOfWeek(new Date())
};
import { startOfMonth, endOfMonth } from 'date-fns';
const interval = {
start: startOfMonth(new Date()),
end: endOfMonth(new Date())
};
import { startOfYear, endOfYear } from 'date-fns';
const interval = {
start: startOfYear(new Date()),
end: endOfYear(new Date())
};
Такой способ гарантирует корректные границы без необходимости ручной корректировки времени.
Интервалы часто формируются динамически, на основе смещения дат.
import { addDays } from 'date-fns';
const start = new Date(2026, 0, 1);
const end = addDays(start, 10);
const interval = {
start,
end
};
Аналогично используются:
subDaysaddMonthssubMonthsaddYearsimport { addMonths } from 'date-fns';
const interval = {
start: new Date(2026, 0, 1),
end: addMonths(new Date(2026, 0, 1), 3)
};
Такой подход удобен для построения скользящих окон времени.
Хотя intervalToDuration не создаёт интервал напрямую,
она часто применяется при конструировании диапазонов на основе разницы
дат.
import { intervalToDuration } from 'date-fns';
const duration = intervalToDuration({
start: new Date(2026, 0, 1),
end: new Date(2026, 3, 1)
});
Полученная структура может использоваться для вычисления новых границ интервала, например при нормализации пользовательского ввода.
При создании интервалов важно контролировать порядок дат.
const isValidInterval = (interval) =>
interval.start <= interval.end;
В date-fns многие функции предполагают корректный порядок, поэтому предварительная проверка снижает риск некорректных вычислений.
Интервалы могут быть приведены к единому виду через сравнение дат:
const normalizeInterval = (interval) => {
return interval.start > interval.end
? { start: interval.end, end: interval.start }
: interval;
};
Такой приём часто используется перед передачей интервала в функции библиотеки.
При работе с наборами дат интервалы формируются динамически:
const dates = [
new Date(2026, 0, 10),
new Date(2026, 0, 15),
new Date(2026, 0, 20)
];
const interval = {
start: dates[0],
end: dates[dates.length - 1]
};
Если данные не отсортированы, предварительно применяется сортировка:
import { compareAsc } from 'date-fns';
dates.sort(compareAsc);
В некоторых сценариях границы интервала зависят от текущего времени:
import { subDays, addDays } from 'date-fns';
const now = new Date();
const interval = {
start: subDays(now, 7),
end: addDays(now, 7)
};
Такие интервалы часто используются для окон анализа данных или выборок.
Создание интервала часто комбинируется с функциями привязки к календарю:
import { startOfWeek, endOfWeek } from 'date-fns';
const interval = {
start: startOfWeek(new Date(), { weekStartsOn: 1 }),
end: endOfWeek(new Date(), { weekStartsOn: 1 })
};
Параметр weekStartsOn позволяет унифицировать поведение
интервала в зависимости от локали или бизнес-логики.
Для систем, где важна повторяемость расчётов, интервалы формируются от фиксированных точек:
const base = new Date(2026, 0, 1);
const interval = {
start: base,
end: new Date(base.getFullYear(), base.getMonth() + 1, base.getDate())
};
Такой подход часто применяется в отчётных системах и агрегациях.
После создания интервала он используется в других функциях date-fns, например:
Пример структуры:
const interval = {
start: new Date(2026, 0, 1),
end: new Date(2026, 0, 31)
};
Такая модель становится базовой единицей для большинства операций над временем в библиотеке.