HTML элемент <input type="date"> позволяет легко вводить даты на веб-сайтах. Этот удобный инструмент экономит время пользователей и упрощает валидацию данных на сервере. В статье мы подробно разберем, как использовать <input type="date"> и сделать ввод дат еще проще для посетителей сайта.
Основы элемента <input type="date">
<input type="date"> - это HTML элемент формы, который позволяет пользователю выбрать дату из всплывающего календаря или ввести ее вручную в текстовое поле. Браузеры отображают <input type="date"> по-разному, но обычно это поле с кнопкой для вызова календаря.
Поддержка <input type="date"> пока не идеальна. В старых браузерах он просто деградирует в обычное текстовое поле. Но в современных браузерах этот элемент уже хорошо работает.
Значение поля <input type="date"> всегда имеет формат
yyyy-mm-dd
вне зависимости от локали браузера.
Это упрощает последующую обработку даты на сервере. К примеру, мы можем установить дату по умолчанию:
А в JavaScript прочитать введенное значение:
let date = document.querySelector('input[type="date"]').value;
В дополнение к общим атрибутам, <input type="date"> поддерживает специальные:
- min - минимальная дата
- max - максимальная дата
- step - шаг изменения даты
С их помощью можно гибко настраивать и валидировать поля с датами, о чем речь пойдет далее.
Установка границ с помощью min и max
Одна из полезных возможностей <input type="date"> - это ограничение диапазона дат с помощью атрибутов min и max. Например, чтобы разрешить выбирать только даты в апреле 2023 года, можно написать:
Если пользователь введет дату раньше 1 апреля или позже 30 апреля, то поле будет помечено как невалидное в поддерживаемых браузерах. Это позволяет избежать ошибок на стороне клиента.
Однако важно помнить, что проверку данных нужно дублировать и на сервере. Злоумышленник может легко обойти ограничения HTML и отправить любую дату напрямую на бекенд.
Использование шага и значения по умолчанию
Атрибут step определяет interval, с которым можно выбирать даты в <input type="date">. Например, step="7" означает, что доступны даты с интервалом в 7 дней.
А value задает дату по умолчанию при первой загрузке страницы:
Здесь по умолчанию будет выбрана дата 21 марта 2023 года. А выбрать можно будет только даты с интервалом в неделю относительно нее.
Обязательные поля и паттерны
Чтобы сделать поле <input type="date"> обязательным для заполнения, используется атрибут required. При попытке отправить форму с пустым полем появится сообщение об ошибке.
Для валидации введенного значения в старых браузерах можно задать шаблон через атрибут pattern. Например, паттерн "[0-9]{4}-[0-9]{2}-[0-9]{2}" проверит, что дата соответствует формату ГГГГ-ММ-ДД.
Советы по кросс-браузерной поддержке
Чтобы <input type="date"> корректно работал во всех браузерах, рекомендуется:
- Использовать pattern для проверки формата даты
- Разбить date на отдельные select для дня, месяца и года
- Применять jQuery datepicker и другие JavaScript решения
Такой подход обеспечит согласованную работу элемента ввода даты на всех устройствах и браузерах.
Примеры оформления <input type="date">
Давайте рассмотрим несколько практических примеров использования <input type="date"> на сайте.
Выбор даты доставки заказа
На странице оформления заказа в интернет-магазине можно добавить поле для указания желаемой даты доставки:
Чтобы ограничить период ожидания, используем min и max. А с помощью required делаем заполнение обязательным.
Ввод даты рождения
При регистрации на сайте часто требуется указать дату рождения. <input type="date"> позволяет сделать это удобно:
Тут также имеет смысл ограничить диапазон допустимых дат min и max, чтобы избежать ошибок.
Подбор свободных дат для бронирования
На сайте отеля или другой бронируемой услуги полезно показывать только свободные для брони даты. Это можно реализовать с помощью <input type="date"> и скрипта на бекенде.
Стилизация <input type="date"> с CSS
Внешний вид элемента <input type="date"> можно гибко настроить при помощи CSS, например:
input[type="date"] { padding: 12px 16px; border: 1px solid #ccc; border-radius: 4px; }
Поддерживаются различные свойства, как для обычных текстовых полей: размер, цвета, отступы, рамки и т.д. Это позволяет стилизовать date под дизайн сайта.
Валидация введенных данных
Помимо атрибутов min, max и required, для проверки корректности введенной даты можно использовать следующие средства:
Паттерны
Атрибут pattern задает регулярное выражение для валидации значения. Например:
Этот паттерн проверит, что дата соответствует формату ГГГГ-ММ-ДД.
JavaScript
Для более гибкой валидации можно написать скрипт на JavaScript. Например, проверить, что год в диапазоне 1900-2099, месяц 1-12, день 1-31.
Серверная валидация
На backend также следует проверять введенные данные. Это защитит от отправки некорректных значений обходным путем.
Доступность и юзабилити
Чтобы сделать работу с <input type="date"> максимально удобной для пользователя, рекомендуется:
- Добавить placeholder с подсказкой формата даты
- Указать атрибут title с дополнительным описанием
- Стилизовать фокус и ховер состояние
Это повысит юзабилити элемента ввода даты на сайте.
Альтернативы <input type="date">
Если нужна кросс-браузерная поддержка, в качестве альтернативы <input type="date"> можно использовать:
- Отдельные select для дня, месяца и года
- Библиотеки вроде jQuery UI Datepicker
- Маскирование текстового поля с помощью JavaScript
Эти решения обеспечат работу ввода даты в любых браузерах.