Функция isWeekend из библиотеки date-fns
предназначена для определения того, относится ли переданная дата к
выходным дням. Под выходными в стандартной конфигурации понимаются
суббота и воскресенье. Логика работы функции опирается на календарную
неделю и локаль не учитывает — используется фиксированное представление
о структуре недели, где суббота и воскресенье имеют определённые
индексы.
isWeekend принимает объект даты и возвращает булево
значение:
true — если дата попадает на субботу или
воскресеньеfalse — если дата относится к буднему днюСигнатура функции:
isWeekend(date: Date | number): boolean
Функция работает с двумя основными типами входных данных:
DateВнутренняя логика функции основана на значении дня недели, которое извлекается из даты. В JavaScript неделя традиционно представляется диапазоном от 0 до 6:
Выходными считаются значения:
Любое другое значение трактуется как будний день.
import { isWeekend } from 'date-fns'
isWeekend(new Date(2026, 0, 10)) // суббота → true
isWeekend(new Date(2026, 0, 11)) // воскресенье → true
isWeekend(new Date(2026, 0, 12)) // понедельник → false
В данном примере используется локальное время среды выполнения. Это означает, что результат зависит от текущего часового пояса, установленного в системе.
Функция одинаково корректно обрабатывает числовые временные метки:
import { isWeekend } from 'date-fns'
const saturdayTimestamp = new Date(2026, 0, 10).getTime()
const mondayTimestamp = new Date(2026, 0, 12).getTime()
isWeekend(saturdayTimestamp) // true
isWeekend(mondayTimestamp) // false
Timestamp интерпретируется как количество миллисекунд с Unix-эпохи, после чего преобразуется в дату внутри функции.
Определение выходного дня зависит от локального времени выполнения. При одинаковом timestamp, но разных часовых поясах, день недели может различаться.
Пример ситуации:
Это особенно важно при работе с серверными приложениями и распределёнными системами, где данные приходят в UTC.
import { isWeekend } from 'date-fns'
const dates = [
new Date(2026, 0, 9),
new Date(2026, 0, 10),
new Date(2026, 0, 11),
new Date(2026, 0, 12)
]
const weekends = dates.filter(isWeekend)
Результатом будет массив, содержащий только субботу и воскресенье.
import { isWeekend } from 'date-fns'
function canProcessTransaction(date) {
if (isWeekend(date)) {
return false
}
return true
}
Такая логика часто используется в финансовых системах, логистике и расписаниях.
import { isWeekend } from 'date-fns'
function getWorkingDays(dates) {
return dates.filter(date => !isWeekend(date))
}
Функция выделяет рабочие дни из набора дат, что упрощает построение графиков и отчётов.
Если переданное значение не является датой или timestamp, результат зависит от преобразования внутри Jav * aScript:
Invalid Date приводит к NaN при
вычисленияхПример потенциальной проблемы:
isWeekend('not a date') // некорректный ввод
Корректная практика предполагает предварительную валидацию даты.
Строковые представления дат не являются предпочтительным форматом, но JavaScript допускает их преобразование:
import { isWeekend } from 'date-fns'
isWeekend(new Date('2026-01-10')) // true или false в зависимости от дня
Однако парсинг строк зависит от реализации движка и может приводить к различиям в интерпретации формата.
Без использования date-fns аналогичная логика
реализуется через стандартный Date:
function isWeekendNative(date) {
const day = date.getDay()
return day === 0 || day === 6
}
isWeekend в date-fns по сути инкапсулирует
эту проверку, обеспечивая единообразие в рамках библиотеки и
согласованность с другими функциями работы с датами.
isWeekend часто используется совместно с другими
утилитами:
addDaysimport { isWeekend, addDays } from 'date-fns'
let date = new Date(2026, 0, 1)
for (let i = 0; i < 10; i++) {
date = addDays(date, 1)
if (!isWeekend(date)) {
// обработка рабочего дня
}
}
eachDayOfIntervalimport { eachDayOfInterval, isWeekend } from 'date-fns'
const days = eachDayOfInterval({
start: new Date(2026, 0, 1),
end: new Date(2026, 0, 31)
})
const weekdays = days.filter(date => !isWeekend(date))
При массовой обработке дат isWeekend демонстрирует
низкую вычислительную сложность, так как операция сводится к извлечению
дня недели и сравнению с двумя значениями.
В системах с высокой нагрузкой функция может использоваться без необходимости оптимизации, поскольку не выполняет сложных вычислений или работы с внешними источниками данных.
В некоторых бизнес-моделях выходные дни могут отличаться от
стандартных (например, пятница и суббота в отдельных странах). В таких
случаях isWeekend не подходит напрямую, поскольку фиксирует
западную модель недели. Для альтернативных календарей требуется
дополнительная логика поверх функции.
Пример адаптации:
import { isWeekend } from 'date-fns'
function isCustomWeekend(date) {
const day = date.getDay()
return day === 5 || day === 6 // пятница и суббота
}
isWeekend выступает базовым строительным блоком для:
Функция обеспечивает атомарную проверку, которая часто комбинируется с более сложной бизнес-логикой.