Метод gotoYear() в библиотеке Pikaday предназначен для
программного перехода календаря к указанному году. После вызова метода
отображаемая область календаря мгновенно переключается на выбранный год,
сохраняя текущий месяц либо используя внутреннюю логику компонента для
отображения соответствующей даты.
Метод применяется в ситуациях, когда необходимо быстро переместить пользователя на определённый временной период без последовательного перелистывания месяцев или лет.
Основные сценарии использования:
picker.gotoYear(year);
| Параметр | Тип | Описание |
|---|---|---|
year |
Number | Год, к которому необходимо перейти |
Метод ничего не возвращает.
undefined
const picker = new Pikaday({
field: document.getElementById('date')
});
picker.gotoYear(2030);
После выполнения кода календарь переключится на 2030 год.
Если календарь был открыт на июне 2025 года, после вызова метода он покажет июнь 2030 года.
Важно понимать, что gotoYear() не изменяет выбранную
дату.
Метод воздействует исключительно на отображаемую область календаря.
Например:
picker.setDate(new Date(2024, 4, 15));
picker.gotoYear(2035);
В этом случае:
Это позволяет разделять понятия:
Новички часто путают gotoYear() и
setDate().
picker.gotoYear(2030);
Изменяет только отображение календаря.
picker.setDate(new Date(2030, 0, 1));
Изменяет выбранную дату и обновляет поле ввода.
Сравнение:
| Метод | Меняет отображение | Меняет выбранную дату |
|---|---|---|
gotoYear() |
Да | Нет |
setDate() |
Да | Да |
Часто требуется открыть определённый год после действия пользователя.
<input id="date">
<button id="show2050">
Показать 2050 год
</button>
const picker = new Pikaday({
field: document.getElementById('date')
});
document
.getElementById('show2050')
.addEventListener('click', () => {
picker.gotoYear(2050);
});
После нажатия кнопки календарь перейдёт к 2050 году.
Метод удобно комбинировать с элементом
<select>.
<select id="years">
<option>2020</option>
<option>2025</option>
<option>2030</option>
<option>2035</option>
</select>
const picker = new Pikaday({
field: document.getElementById('date')
});
document
.getElementById('years')
.addEventListener('change', function () {
picker.gotoYear(Number(this.value));
});
Выбор значения приводит к мгновенному переходу календаря к соответствующему году.
При работе с архивными данными удобно использовать список лет.
const archiveYears = [
2018,
2019,
2020,
2021,
2022
];
function showArchive(year) {
picker.gotoYear(year);
}
Такой подход часто встречается в:
Текущий год можно определить через объект Date.
const currentYear = new Date().getFullYear();
picker.gotoYear(currentYear);
Календарь всегда будет открываться на актуальном году независимо от даты запуска приложения.
Метод принимает любое числовое выражение.
const currentYear = new Date().getFullYear();
picker.gotoYear(currentYear + 5);
Переход на пять лет вперёд.
picker.gotoYear(currentYear - 10);
Переход на десять лет назад.
Год может вводиться пользователем вручную.
<input id="yearInput" type="number">
<button id="go">
Перейти
</button>
document
.getElementById('go')
.addEventListener('click', () => {
const year = Number(
document.getElementById('yearInput').value
);
picker.gotoYear(year);
});
Перед вызовом рекомендуется проверять входные данные.
const year = Number(input.value);
if (!Number.isNaN(year)) {
picker.gotoYear(year);
}
Более строгий вариант:
const year = Number(input.value);
if (
Number.isInteger(year) &&
year >= 1900 &&
year <= 2100
) {
picker.gotoYear(year);
}
Такой подход предотвращает ошибки интерфейса и повышает устойчивость приложения.
Нередко требуется указать не только год, но и месяц.
picker.gotoYear(2030);
picker.gotoMonth(6);
После выполнения календарь перейдёт к июлю 2030 года.
Следует помнить, что месяцы в Pikaday нумеруются с нуля:
| Значение | Месяц |
|---|---|
| 0 | Январь |
| 1 | Февраль |
| 2 | Март |
| 3 | Апрель |
| 4 | Май |
| 5 | Июнь |
| 6 | Июль |
| 7 | Август |
| 8 | Сентябрь |
| 9 | Октябрь |
| 10 | Ноябрь |
| 11 | Декабрь |
Для точного позиционирования часто применяется метод
gotoDate().
picker.gotoDate(
new Date(2040, 8, 10)
);
Однако если необходимо изменить только год, использование
gotoYear() выглядит более наглядным и читаемым.
Если в конфигурации определены ограничения диапазона дат, переход может быть скорректирован внутренней логикой компонента.
const picker = new Pikaday({
field: input,
minDate: new Date(2020, 0, 1),
maxDate: new Date(2030, 11, 31)
});
Попытка перейти далеко за пределы диапазона:
picker.gotoYear(2050);
может привести к отображению ближайшего допустимого периода в зависимости от реализации версии библиотеки.
Поэтому при работе с ограничениями полезно самостоятельно контролировать диапазон:
if (year >= 2020 && year <= 2030) {
picker.gotoYear(year);
}
Один из наиболее распространённых сценариев — выбор даты рождения.
Без программного перехода пользователю пришлось бы долго перелистывать календарь.
birthYearButton.addEventListener('click', () => {
picker.gotoYear(1990);
});
Либо:
picker.gotoYear(1985);
picker.gotoMonth(0);
что позволяет сразу показать январь нужного года.
В корпоративных приложениях год может зависеть от данных записи.
function openEmployee(employee) {
picker.gotoYear(
employee.hireYear
);
}
При открытии карточки сотрудника календарь автоматически перемещается к году приёма на работу.
Метод работает очень быстро, поскольку:
Даже многократные вызовы:
picker.gotoYear(2020);
picker.gotoYear(2021);
picker.gotoYear(2022);
picker.gotoYear(2023);
обычно не создают заметной нагрузки на интерфейс.
picker.gotoYear("2030");
Во многих случаях это сработает благодаря автоматическому приведению типов, однако рекомендуется использовать число.
Правильнее:
picker.gotoYear(2030);
или
picker.gotoYear(
Number(yearString)
);
picker.gotoYear(undefined);
или
picker.gotoYear(NaN);
Подобные значения могут привести к непредсказуемому поведению.
Ошибка проектирования:
picker.gotoYear(2040);
console.log(
picker.getDate()
);
Некоторые разработчики ожидают увидеть дату из 2040 года.
На самом деле метод изменяет только отображение календаря. Для
изменения выбранной даты необходимо использовать
setDate().
picker.gotoYear(
Number(input.value)
);
Если пользователь введёт произвольный текст, результат может оказаться некорректным.
Безопаснее:
const year = Number(input.value);
if (Number.isInteger(year)) {
picker.gotoYear(year);
}
Использовать gotoYear() для навигации, а не для
выбора даты.
Проверять корректность года перед передачей в метод.
Комбинировать с gotoMonth() для точного
позиционирования календаря.
Использовать при работе с историческими и будущими периодами, где последовательное перелистывание неудобно.
Не рассчитывать на изменение значения поля ввода после вызова метода.
Метод gotoYear() является важным инструментом
программной навигации по календарю Pikaday и позволяет быстро
перемещаться между годами без изменения выбранной даты, обеспечивая
удобную работу с большими временными диапазонами.