Я хочу ограничить пользователя только возможностью добавлять будущие даты во входные данные HTML.
Вместо jQuery UI date picker я хочу добавить календарь HTML 5. Может ли кто-нибудь сказать мне, как я могу ограничить ввод будущих дат?
Я хочу ограничить пользователя только возможностью добавлять будущие даты во входные данные HTML.
Вместо jQuery UI date picker я хочу добавить календарь HTML 5. Может ли кто-нибудь сказать мне, как я могу ограничить ввод будущих дат?
Вы можете использовать минимальные и максимальные атрибуты даты ввода HTML5
Код HTML5
<input type="date" name="bday" min="2014-05-11" max="2014-05-20">
ИЗМЕНИТЬ
Вам нужно использовать jQuery для его достижения
Код jQuery
$(function(){
var dtToday = new Date();
var month = dtToday.getMonth() + 1;
var day = dtToday.getDate();
var year = dtToday.getFullYear();
if(month < 10)
month = '0' + month.toString();
if(day < 10)
day = '0' + day.toString();
var maxDate = year + '-' + month + '-' + day;
$('#txtDate').attr('max', maxDate);
});
Объяснение Максимальный атрибут даты ввода HTML5 занимает месяц и день в двузначном формате.
Пример: 5 (месяц) недействителен, в то время как действует 05 (месяц) Пример: 1 (День) недействителен, тогда как 01 (День) действителен
Итак, я добавил код ниже
if(month < 10)
month = '0' + month.toString();
if(day < 10)
day = '0' + day.toString();
Проверьте мой обновленный скрипт
Обратитесь демонстрацию скрипта
Чтобы построить ответ на @Chirag Vidani, дата может быть сгенерирована с меньшим количеством строк, например:
var now = new Date(),
minDate = now.toISOString().substring(0,10);
$('#my-date-input').prop('min', minDate);
Некоторые другие задали вопрос о настройке максимальной даты на текущую дату. Предлагаемые ответы включают использование JavaScript. Но мое решение заключалось в том, чтобы использовать серверный язык для генерации максимального параметра для ввода. Я знаю, что ОП не спрашивал о серверном подходе. Но это решение хорошо работает для меня с использованием С# Razor в качестве моего языка сервера.
На сервере я пишу:
@Html.TextBox("CurrentDate",
Model.CurrentDate.ToString("yyyy-MM-dd"),
new {
@class = "form-control",
@type = "date",
max = DateTime.Now.ToString("yyyy-MM-dd")
})
И затем MVC выводит этот Html:
<input class="form-control" id="CurrentDate" name="CurrentDate"
type="date" max="2016-11-10" value="2016-11-10">
С другими языками сервера подход будет аналогичным образом генерировать максимальный параметр с использованием даты сервера, который может работать или не работать, если ваше требование заключается в использовании даты Клиента. Для моей ситуации дата сервера - это то, что необходимо, потому что там, где хранятся данные.
Используйте атрибут max, который является ожидаемой верхней границей для значения элемента.
<input type="date" max="2014-05-15"/>
Я обновил рабочий скрипт
HTML и js:
var dateControler = {
currentDate : null
}
$(document).on( "change", "#txtDate",function( event, ui ) {
var now = new Date();
var selectedDate = new Date($(this).val());
if(selectedDate > now) {
$(this).val(dateControler.currentDate)
} else {
dateControler.currentDate = $(this).val();
}
});
Старый вопрос Но решение может помочь кому-то, использующему JQuery:
$(document).ready(function () {
var today = new Date();
var day=today.getDate()>9?today.getDate():"0"+today.getDate(); // format should be "DD" not "D" e.g 09
var month=(today.getMonth()+1)>9?(today.getMonth()+1):"0"+(today.getMonth()+1);
var year=today.getFullYear();
$("#dpFromDate").attr('max', year + "-" + month + "-" + day);
});
Формат даты должен быть ГГГГ-ММ-ДД.
Вот PHP-решение, которое получает сегодняшнюю дату и устанавливает ее как максимальное.
<input type="date" name="bday" max="<?php echo date("Y-m-d"); ?>">
Это поместит его в правильный двузначный формат для дня и месяца. https://www.php.net/manual/en/function.date.php
<input type="date" value="<?php echo date("Y-m-d"); ?>" max="<?php echo date("Y-m-d"); ?>">
Это сработало для меня.