showWeekNumber
Параметр showWeekNumber в Pikaday управляет отображением
дополнительной колонки с номером календарной недели. Эта колонка
добавляется слева от сетки дней месяца и вычисляется по правилам
недельной нумерации (обычно ISO 8601). При включении параметра календарь
расширяет свою структуру: каждая строка месяца получает соответствующий
номер недели, что влияет как на визуальную компоновку, так и на логику
восприятия дат.
Основное назначение параметра заключается в обеспечении контекста внутри длинных календарных периодов, где ориентирование по неделям становится важнее, чем по отдельным дням. Это особенно заметно в планировщиках, системах учёта задач и корпоративных интерфейсах.
Опция задаётся при инициализации экземпляра Pikaday через конфигурационный объект:
const picker = new Pikaday({
field: document.getElementById('date'),
showWeekNumber: true
});
После активации параметра календарная сетка приобретает дополнительную колонку слева, где каждая строка соответствует номеру недели.
Если параметр не задан или установлен в false, интерфейс
остаётся классическим: отображаются только дни месяца без дополнительной
структурной информации.
В основе расчёта обычно используется стандарт ISO 8601, где:
Внутренний алгоритм Pikaday рассчитывает номер недели для каждой строки календаря на основе даты, соответствующей первому дню этой строки.
Обобщённо вычисление можно представить следующим образом:
weekNumber = ISOWeek(date)
где ISOWeek — функция, возвращающая порядковый номер
недели для конкретной даты.
Визуально это означает, что каждая строка календаря «привязана» не только к диапазону дат, но и к недельному идентификатору.
При активированном параметре таблица календаря приобретает следующую структуру:
Пример логики отображения:
W | Пн Вт Ср Чт Пт Сб Вс
------------------------
1 | 1 2 3 4 5 6 7
2 | 8 9 10 11 12 13 14
3 | 15 16 17 18 19 20 21
Колонка «W» не является интерактивной в стандартной реализации Pikaday, но может быть использована как визуальный ориентир или расширена кастомной логикой через модификацию рендера.
Включение showWeekNumber изменяет структуру генерируемой
таблицы календаря. Добавляется дополнительная ячейка в каждую строку
недельного ряда.
Это приводит к следующим изменениям:
<td> в каждой
строке;Пример упрощённой структуры:
<tr>
<td class="pika-week">12</td>
<td>1</td>
<td>2</td>
...
<td>7</td>
</tr>
Эта колонка не участвует в выборе даты, если не добавлена дополнительная логика разработчиком.
Внешний вид колонки недели обычно контролируется через CSS-класс, связанный с ячейками недели. В стандартной разметке Pikaday используется класс вида:
.pika-weekБазовая стилизация может включать:
.pika-week {
color: #999;
font-size: 12px;
text-align: center;
padding: 4px 6px;
}
При необходимости колонка может быть визуально отделена:
.pika-week {
border-right: 1px solid #e5e5e5;
font-weight: 500;
}
В сложных интерфейсах колонка недели часто фиксируется визуально как вспомогательный элемент, не конкурирующий с основным контентом календаря.
Параметр firstDay, задающий начальный день недели (0 —
воскресенье, 1 — понедельник и т.д.), влияет на визуальную сетку, но не
меняет сам принцип вычисления номера недели.
const picker = new Pikaday({
field: document.getElementById('date'),
showWeekNumber: true,
firstDay: 1
});
В этом случае:
Важно различать визуальное представление и логическую систему
нумерации недель: firstDay отвечает за отображение, а не за
вычисление номера недели.
При отображении недельного номера возникает характерный эффект на границах месяцев:
Это нормальное поведение ISO-нумерации и не является ошибкой.
Пример:
Pikaday не корректирует эти значения под «календарное удобство», а сохраняет строгую недельную систему.
Колонка недель становится особенно полезной в следующих сценариях:
В таких интерфейсах неделя выступает основной единицей времени, а дни играют второстепенную роль.
При использовании showWeekNumber возникают специфические
особенности:
Также важно учитывать, что стандартный Pikaday не предоставляет встроенной интерактивности для этой колонки: она не предназначена для выбора, фильтрации или событий по клику без дополнительного кода.
При необходимости поведение колонки недели может быть расширено. Например, можно изменить отображение, добавив префиксы или кастомный формат:
const picker = new Pikaday({
field: document.getElementById('date'),
showWeekNumber: true,
toString(date, format) {
return moment(date).format('YYYY-MM-DD');
}
});
Хотя toString не влияет напрямую на номер недели, он
часто используется в связке с календарями, где week number отображается
рядом с форматированной датой.
В более продвинутых сценариях можно модифицировать рендеринг таблицы через форк или обёртку над Pikaday, внедряя собственную функцию вычисления недели.
Несмотря на наличие локализации в Pikaday,
showWeekNumber чаще всего опирается на универсальную модель
расчёта недель. Это означает:
В системах, где критична региональная точность, требуется явная проверка соответствия недельного стандарта бизнес-логике приложения.
showWeekNumber изменяет Pikaday не только визуально, но
и концептуально: календарь перестаёт быть исключительно дневной сеткой и
приобретает недельную структуру представления времени. Это влияет на
способ восприятия данных и часто становится основой для более сложных
календарных интерфейсов, где неделя выступает базовой единицей
планирования.