Время ввода HTML, где min — это pm (поздно), а max — am (рано)

У меня есть поле ввода с типом «время». Я хочу иметь позднее время (23:00) в качестве минимального значения и раннее время (6:00) в качестве максимального значения, создавая диапазон от 23:00 до 6:00. (т.е. 23:00, 12:00, 1:00, 2:00, 3:00, 4:00, 5:00, 6:00).

Я пробовал использовать Javascript, хотя хочу использовать его в крайнем случае. Я не хочу, чтобы собственный компонент отображался со значениями, которые я не хочу, чтобы пользователь выбирал (например, на мобильных устройствах).

Установка минимального значения на 00:00:00 и максимального значения на «06:00:00» работает так, как предполагалось. Когда минимальное значение до полуночи, это становится проблемой.

Я ожидаю, что минимальные и максимальные значения создадут диапазон, но это не работает должным образом.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
1 171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я немного поэкспериментировал с псевдоклассом :invalid CSS, но ничего не смог придумать.

Обратите внимание, что в Fire Fox (в отличие от Хром) браузер не включает стрелки вверх и вниз для любого элемента формы <input type = "time">, поэтому атрибуты min и max не действуют.

Отмечу, что Сеть разработчиков Mozilla говорит следующее:

By default, <input type = "time"> does not apply any validation to entered values, other than the user agent's interface generally not allowing you to enter anything other than a time value. This is helpful (assuming the time input is fully supported by the user agent), but you can't entirely rely on the value to be a proper time string, since it might be an empty string (""), which is allowed. It's also possible for the value to look roughly like a valid time but not be correct, such as 25:05.

Источник:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time#Validation

Ответ принят как подходящий

Как указано в документах MDN:

Unlike many data types, time values have a periodic domain, meaning that the values reach the highest possible value, then wrap back around to the beginning again. For example, specifying a min of 14:00 and a max of 2:00 means that the permitted time values start at 2:00 PM, run through midnight to the next day, ending at 2:00 AM.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time#max

Тем не менее, похоже, что это не работает должным образом в Chrome 76.0, после простого теста со значением min больше, чем max, все время не проходит проверку, и форма просто не работает.

Я предлагаю https://timepicker.co/, так как он будет работать в разных браузерах.

input:invalid+.validity:after {
  content: '✖';
}

input:valid+.validity:after {
  content: '✓';
}
<form>
  <label for = "time1">3:00 to 6:00: </label>
  <input type = "time" min = "3:00" max = "6:00" name = "time1" required>
  <span class = "validity"></span>
  <hr>
  <label for = "time2">23:00 to 6:00: </label>
  <input type = "time" min = "23:00" max = "6:00" name = "time2" required>
  <span class = "validity"></span>
</form>

Я отметил это как «правильный ответ». Проще говоря, похоже, что периодический домен не позволяет вам иметь минимальное время больше, чем максимальное время. Мое решение состояло в том, чтобы использовать moment.js и динамически создавать поле выбора/параметра с использованием цикла while. К сожалению, у timepicker.co та же проблема: вы не можете указать диапазон, в котором минимум больше максимума.

JCoulam 29.05.2019 17:28

Вы также можете использовать комбинацию типа time и type date.

rafaelcastrocouto 29.05.2019 23:29

Другие вопросы по теме