Параметр firstDay

Параметр firstDay определяет индекс первого дня недели, с которого начинается отображение календарной сетки в компоненте Pikaday. Значение влияет исключительно на визуальную и логическую структуру недели в календаре, не затрагивая внутреннее представление даты.

Неделя в календаре может начинаться с разных дней в зависимости от региональных стандартов. В одних странах первым днём считается воскресенье, в других — понедельник. Именно для этого используется firstDay, позволяя адаптировать календарь под локальные привычки пользователя.

Ключевая функция параметра:

  • определение стартовой позиции недели в сетке календаря;
  • синхронизация отображения с локализацией;
  • корректировка заголовков дней недели.

Типы значений и диапазон

Параметр принимает целое число в диапазоне от 0 до 6, где каждое значение соответствует дню недели:

  • 0 — воскресенье
  • 1 — понедельник
  • 2 — вторник
  • 3 — среда
  • 4 — четверг
  • 5 — пятница
  • 6 — суббота

Любое значение вне этого диапазона приводит к некорректному поведению отображения или игнорированию настройки в зависимости от реализации и версии библиотеки.

Поведение календаря при изменении firstDay

Изменение firstDay влияет на порядок отрисовки заголовков дней недели и сетки дат. Например, при значении 1 неделя начинается с понедельника, а воскресенье перемещается в конец строки.

Изменения затрагивают:

  • порядок weekdays и weekdaysShort при отображении;
  • сдвиг индексации дней при построении сетки месяца;
  • выравнивание дат относительно первого столбца календаря.

Важно учитывать, что сама дата (объект Date) не изменяется — меняется только представление.

Связь с локализацией (i18n)

Параметр тесно связан с объектом локализации i18n, где задаются подписи дней недели:

  • i18n.weekdays
  • i18n.weekdaysShort

При изменении firstDay библиотека не перестраивает массивы автоматически, а лишь смещает их отображение. Это означает, что разработчик должен обеспечить согласованность между порядком дней и значениями локализации.

Например, при firstDay = 1 ожидается, что первым элементом в i18n.weekdays будет понедельник, иначе возникает визуальное несоответствие между заголовком и календарной сеткой.

Пример базовой конфигурации

const picker = new Pikaday({
    field: document.getElementById('date'),
    firstDay: 1
});

В данном случае календарь будет начинать неделю с понедельника, что соответствует распространённому стандарту ISO 8601.

Поведение в разных региональных стандартах

В зависимости от региона значение firstDay часто устанавливается следующим образом:

  • США и часть англоязычных стран: 0 (воскресенье)
  • Европа и большинство международных интерфейсов: 1 (понедельник)
  • Некоторые исламские страны: возможны локальные вариации, но в интерфейсах чаще также используется 6 или 0 в зависимости от контекста календаря

Влияние на отображение сетки месяца

При рендеринге месяца Pikaday строит таблицу, где первая строка может содержать даты предыдущего месяца. firstDay определяет, с какого дня начинается эта сетка, что влияет на:

  • количество «пустых» ячеек в начале месяца;
  • смещение первой недели;
  • визуальную плотность календаря при открытии.

Если firstDay установлен в значение, не совпадающее с локалью, может возникать ощущение «сдвинутого» календаря, где недели выглядят непривычно.

Взаимодействие с вычислением недель

Хотя Pikaday не является системой календарных вычислений, параметр влияет на отображение недельной структуры. При интеграции с логикой расчёта недель (например, при группировке дат по неделям) необходимо учитывать, что визуальное начало недели может отличаться от программного.

Типичная ошибка возникает при использовании getDay() у объекта Date, который всегда возвращает фиксированную нумерацию от воскресенья (0), независимо от firstDay. Это приводит к расхождению между логикой приложения и интерфейсом календаря.

Согласование с ISO 8601

Стандарт ISO 8601 определяет понедельник как первый день недели. Для соответствия этому стандарту в Pikaday используется:

firstDay: 1

Однако важно понимать, что ISO-нумерация недель (где неделя может начинаться в одном году, а заканчиваться в другом) не реализуется автоматически через firstDay. Параметр влияет только на визуальную часть.

Влияние на доступность и UX

Изменение первого дня недели оказывает влияние на восприятие интерфейса:

  • снижает когнитивную нагрузку при соответствии локальным стандартам;
  • уменьшает ошибки выбора даты в формах;
  • улучшает предсказуемость календаря для пользователей разных регионов.

Несоответствие локали и firstDay приводит к нарушению привычного визуального паттерна, особенно в корпоративных приложениях с международной аудиторией.

Пример динамической смены значения

picker.setFirstDay(0);
picker.draw();

После изменения требуется перерисовка календаря, иначе визуальные изменения не будут применены.

Связь с рендерингом заголовков

При построении заголовка календаря массив дней недели сдвигается циклически. Логика работы сводится к переупорядочиванию массива индексов:

  • исходный порядок: [0,1,2,3,4,5,6]
  • при firstDay = 1: [1,2,3,4,5,6,0]

Этот сдвиг применяется ко всем визуальным элементам, связанным с днями недели.

Типичные ошибки использования

Часто встречаются следующие проблемы:

  • несоответствие firstDay и массива i18n.weekdays;
  • попытка использовать строковые значения вместо числовых;
  • ожидание изменения логики Date.getDay() при изменении параметра;
  • отсутствие перерисовки после динамического изменения настройки.

Поведение при отсутствии параметра

Если firstDay не указан, используется значение по умолчанию, которое зависит от реализации Pikaday и может соответствовать воскресенью (0). В локализованных сборках значение может переопределяться через конфигурацию i18n или внешние настройки.