#javascript #html #jquery
Вопрос:
Я использую jQuery Datepicker, и у меня те же изменения в jQuery, но в этом что-то пошло не так.
Все работает нормально в соответствии с моими требованиями, но когда я выбираю дату с December 2020
даты начала, чем все даты даты окончания, отключается.
И это происходит только тогда, когда я выбираю даты декабря 2020 года.
if (jQuery('#datetimepicker1').length > 0) {
jQuery('#datetimepicker1').datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
maxDate: 0,
onChangeDateTime: function(dp, $input) {
var from = $input.val().split("/");
var f = new Date(from[2], from[1], from[0]);
f.setDate(f.getDate());
var datemin = f.getFullYear() "/" f.getMonth() "/" f.getDate();
var datestr= from[2] "/" f.getMonth() "/" from[0];
$("#datetimepicker2").datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
changeMonth: f.getMonth(),
changeYear: f.getFullYear(),
minDate: new Date(datemin),
startDate:datemin,
});
}
});
}
if (jQuery('#datetimepicker2').length > 0) {
jQuery('#datetimepicker2').datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
maxDate: 0,
});
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js"></script>
<input id="datetimepicker1" type="text" placeholder="Start Date"/>
<input id="datetimepicker2" type="text" placeholder="End Date"/>
Комментарии:
1. Я предполагаю, что у вас есть путаница между форматами (
Y/m/d
иd/m/Y
), так что нет разумной даты, напримерnew Date("03","12","2020")
==Mon Jul 12 1909
2. извините за ошибку, проблема, вероятно, в том, что месяц, похоже, будет основан на нуле, например
new Date("2019","11","02")
==Dec 02 2019
3. @JohnSmith Вы можете предоставить код? где мне нужно переодеться?
Ответ №1:
Месяцы на Javascript 0
основаны, но ваш ввод 1
основан на данных, поэтому вам нужно преобразовать
var f = new Date(from[2], from[1]-1, from[0]);
Он терпит неудачу, так как нет 13-го месяца, поэтому «запутывается».
Поскольку вы используете не саму дату, а переформатирование обратно в строку, вам также необходимо преобразовать обратно эти строки:
var datemin = f.getFullYear() "/" (f.getMonth() 1) "/" f.getDate();
var datestr= from[2] "/" (f.getMonth() 1) "/" from[0];
if (jQuery('#datetimepicker1').length > 0) {
jQuery('#datetimepicker1').datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
maxDate: 0,
onChangeDateTime: function(dp, $input) {
var from = $input.val().split("/");
var f = new Date(from[2], from[1]-1, from[0]);
f.setDate(f.getDate());
var datemin = f.getFullYear() "/" (f.getMonth() 1) "/" f.getDate();
var datestr= from[2] "/" (f.getMonth() 1) "/" from[0];
$("#datetimepicker2").datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
changeMonth: f.getMonth(),
changeYear: f.getFullYear(),
minDate: new Date(datemin),
startDate:datemin,
});
}
});
}
if (jQuery('#datetimepicker2').length > 0) {
jQuery('#datetimepicker2').datetimepicker({
lang: 'ch',
timepicker: false,
format: 'd/m/Y',
formatDate: 'Y/m/d',
maxDate: 0,
});
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js"></script>
<input id="datetimepicker1" type="text" placeholder="Start Date"/>
<input id="datetimepicker2" type="text" placeholder="End Date"/>