Выбор даты и времени в jquery
Ребята, я использую Date timePicker от trentrichardson.com.
У меня есть форма с двумя полями ввода: from и to, и я хочу иметь возможность динамически устанавливать minDate для моего поля "to", равное значению моего поля "from".
Я знаю, что должен использовать опцию beforShow, но не знаю, как реализовать эту функцию.
$('.from,.to').datetimepicker({
beforeShow: customRange
});
РЕДАКТИРОВАНИЕ / РЕШЕНИЕ
function customRange(input) {
if (input.id == 'to') {
var x=$('#from').datepicker("getDate");
$( ".to" ).datepicker( "option", "minDate",x );
}
else if (input.id == 'from') {
var x=$('#to').datepicker("getDate");
$( ".from" ).datepicker( "option", "maxDate",x );
} }
7 ответов
Вы можете установить и получить minDate динамически с помощью setter и getter:
//getter
var minDate = $( ".selector" ).datepicker( "option", "minDate" );
//setter
$( ".selector" ).datepicker( "option", "minDate", new Date(2007, 1 - 1, 1) );
Если у вас есть два текстовых поля с соответствующими идентификаторами from
а также to
и вы хотите minDate
из to
быть выбранной датой from
затем сделайте следующее:
$("#from").datepicker({
minDate: 0, // to disable past dates (skip if not needed)
onClose: function(selectedDate) {
// Set the minDate of 'to' as the selectedDate of 'from'
$("#to").datepicker("option", "minDate", selectedDate);
}
});
$("#to").datepicker();
Вы можете ограничить диапазон выбора даты.
Но вы хотите установить этот диапазон при создании указателя даты на "от". Я сделал вам демо, которое, кажется, работает нормально, насколько я понимаю вопрос.
Лука: Небольшое дополнение к твоему ответу...
Используя предложенную вами функцию, компонент времени игнорируется при первом отображении выбора даты и времени. Если вы закроете указатель даты и снова откроете его, компонент времени загадочным образом снова появится. Я не совсем уверен, что является причиной этого, но это можно исправить с помощью небольшого взлома:
function setMinMaxDate ( element )
{
// Store current date - setting max/min date seems to destroy time component
var val = $(element).val();
if (element.id == 'endDate')
{
var x=$('#startDate').datetimepicker("getDate");
$( element ).datetimepicker( "option", "minDate",x );
}
else if (element.id == 'startDate')
{
var x=$('#endDate').datetimepicker("getDate");
$( element ).datetimepicker( "option", "maxDate",x );
}
// Restore date
$(element).val(val);
}
Используйте последнюю версию bootstrap.min.js
$("#from").datepicker( {
format: "dd-mm-yyyy",
endDate: '+0d',
autoclose: true,
}).on('changeDate', function(e) {
var oldDate = $('.datepicker-current').val();
$('#to').data('datepicker').setEndDate(oldDate);
});
Ни один из приведенных выше ответов не помог мне вообще. Это либо не сработало, либо выдало какую-то ошибку.
Поэтому я объединил их все вместе и сделал свой собственный. Я использовал moment.js, как уже упоминалось выше, просто скачайте его и включите в свою страницу.
$("#start_date").datetimepicker({
format: 'Y-m-d H:00:00',
onChangeDateTime: function(dp, $input){
var dt2 = $('#end_date');
var minDate = $('#start_date').val();
var currentDate = new Date();
var targetDate = moment(minDate).toDate();
var dateDifference = currentDate - targetDate;
var minLimitDate = moment(dateDifference).format('YYYY/MM/DD');
var endDate = moment(dt2.val()).toDate();
if((currentDate - endDate) >= (currentDate - targetDate))
dt2.datetimepicker({
'value': minDate
});
dt2.datetimepicker({
'minDate': '-'+minLimitDate
});
}
});
$("#end_date").datetimepicker({
format: 'Y-m-d H:00:00'
});
Я уверен, что есть лучший способ сделать это, но я не смог его найти. Поэтому я надеюсь, что это поможет кому-то в будущем.
В jQuery UI datepicker
Есть много функций, которые полезно установить minDate
или же maxDate
динамически как onSelect
, onClose
,
демо onClose
уже предоставлено в ответе @Tanvir см. здесь: datepicker onClose пример
Так что я дам вам пример onSelect
,
перед этим я скажу вам разницу между onSelect
а также onclose
как следует из названия onSelect
огонь сразу после того, как пользователь выбирает дату и onClose
срабатывает, когда указатель даты закрывается после выбора даты, вот и все.
здесь у нас есть два DatePicker pickupdate1
а также pickupdate2
и мы хотим установить выбранную дату pickupdate1
быть мини-датой pickupdate2
и он должен быть динамическим, поэтому вот код:
$("#pickupdate1").datepicker({
dateFormat: "dd-mm-yy",
onSelect: function (selectedDate) {
$('#pickupdate2').datepicker('option', 'minDate', selectedDate);
}
});
$("#pickupdate2").datepicker({
dateFormat: "dd-mm-yy",
});
Это сработало для меня
<input type="date" name="cname" value="" min="<?php echo date("Y-m-d") ?>"/>
На trentrichardson.com есть пример. Они используют "onSelect". Для меня это не работает Perfert. При установке minDate или MaxDate компонент времени устанавливается на 0, и остается только дата. И мне пришлось решить некоторые проблемы локализации.