Параметр firstDay определяет индекс первого дня недели,
с которого начинается отображение календарной сетки в компоненте
Pikaday. Значение влияет исключительно на визуальную и логическую
структуру недели в календаре, не затрагивая внутреннее представление
даты.
Неделя в календаре может начинаться с разных дней в зависимости от
региональных стандартов. В одних странах первым днём считается
воскресенье, в других — понедельник. Именно для этого используется
firstDay, позволяя адаптировать календарь под локальные
привычки пользователя.
Ключевая функция параметра:
Параметр принимает целое число в диапазоне от 0 до
6, где каждое значение соответствует дню недели:
0 — воскресенье1 — понедельник2 — вторник3 — среда4 — четверг5 — пятница6 — субботаЛюбое значение вне этого диапазона приводит к некорректному поведению отображения или игнорированию настройки в зависимости от реализации и версии библиотеки.
Изменение firstDay влияет на порядок отрисовки
заголовков дней недели и сетки дат. Например, при значении
1 неделя начинается с понедельника, а воскресенье
перемещается в конец строки.
Изменения затрагивают:
weekdays и weekdaysShort при
отображении;Важно учитывать, что сама дата (объект Date) не
изменяется — меняется только представление.
Параметр тесно связан с объектом локализации i18n, где
задаются подписи дней недели:
i18n.weekdaysi18n.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 определяет понедельник как первый день недели. Для соответствия этому стандарту в Pikaday используется:
firstDay: 1
Однако важно понимать, что ISO-нумерация недель (где неделя может
начинаться в одном году, а заканчиваться в другом) не реализуется
автоматически через firstDay. Параметр влияет только на
визуальную часть.
Изменение первого дня недели оказывает влияние на восприятие интерфейса:
Несоответствие локали и 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 или внешние настройки.