Функция eachWeekOfInterval из библиотеки
date-fns формирует массив дат, соответствующих началу
каждой недели внутри заданного временного интервала. Поведение функции
определяется локалью (первый день недели) и правилами округления границ
интервала.
eachWeekOfInterval(interval, options?)
interval
{
start: Date | number,
end: Date | number
}
start — начало интервалаend — конец интервалаoptions (необязательный параметр)
{
locale?: Locale,
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
}
weekStartsOn — задаёт первый день недели (0 —
воскресенье, 1 — понедельник и т.д.)locale — локаль, определяющая правила календарной
неделиФункция:
startКлючевая особенность — нормализация к началу недели, а не к произвольной дате внутри интервала.
import { eachWeekOfInterval } from 'date-fns'
const result = eachWeekOfInterval({
start: new Date(2024, 0, 1),
end: new Date(2024, 0, 31)
})
console.log(result)
Результат:
[
2023-12-31,
2024-01-07,
2024-01-14,
2024-01-21,
2024-01-28
]
(даты могут отличаться в зависимости от weekStartsOn и локали)
import { eachWeekOfInterval } from 'date-fns'
const result = eachWeekOfInterval(
{
start: new Date(2024, 0, 1),
end: new Date(2024, 0, 31)
},
{
weekStartsOn: 1
}
)
При weekStartsOn: 1 (понедельник) недели будут смещены,
и массив начнётся с ближайшего понедельника.
Если start попадает внутрь недели, функция возвращает
начало этой недели, а не сам start.
Если end находится внутри недели, последняя неделя всё
равно будет включена, поскольку она пересекает интервал.
DateweekStartsOn, приводящее к смещению
календаряФункция eachMonthOfInterval возвращает массив дат,
соответствующих началу каждого месяца внутри заданного интервала.
eachMonthOfInterval(interval)
{
start: Date | number,
end: Date | number
}
Алгоритм работы:
startendРезультатом является набор дат, каждая из которых представляет первый день месяца.
import { eachMonthOfInterval } from 'date-fns'
const result = eachMonthOfInterval({
start: new Date(2024, 0, 15),
end: new Date(2024, 5, 10)
})
console.log(result)
Результат:
[
2024-01-01,
2024-02-01,
2024-03-01,
2024-04-01,
2024-05-01,
2024-06-01
]
Даже если start установлен в середине месяца,
возвращается первый день этого месяца.
Если end находится внутри месяца, этот месяц включается
полностью как последний элемент.
import { eachMonthOfInterval } from 'date-fns'
const months = eachMonthOfInterval({
start: new Date(2023, 8, 10),
end: new Date(2024, 2, 1)
})
Результат:
[
2023-09-01,
2023-10-01,
2023-11-01,
2023-12-01,
2024-01-01,
2024-02-01,
2024-03-01
]
01startОбе функции относятся к инструментам разбиения интервалов, но работают на разных уровнях календарной иерархии.
Обе функции выполняют одну и ту же концепцию:
преобразование интервала в дискретные календарные единицы фиксированного уровня
Различие заключается только в единице дискретизации — неделя или месяц.