JQuery UI Timepicker выключен на 1 минуту
Я поддерживаю приложение, использующее JQuery UI Timepicker, и пытаюсь устранить ошибку.
По сути, это как его воссоздать:
Есть 2 таймера, время начала и время окончания
1. во время начала выберите 6:00 (из часового пояса)
2. в конце выберите 12:00 (из часового пояса)
3. вернитесь к времени начала и выберите 00 в минутной области
Затем выполняется некоторый код для определения истекшего времени в минутах. Этот код:
function setDuration() {
var $startTime = $(".field.times input[name$='StartTime']");
var $endTime = $(".field.times input[name$='EndTime']");
var $durationHours = $(".field.duration input[name$='DurationHours']");
var $durationMinutes = $(".field.duration input[name$='DurationMinutes']");
if ($startTime.val() != "" && $endTime.val() != "") {
var startTime = $startTime.timepicker ? $startTime.timepicker('getTimeAsDate') : Date.parse('01 jan 01 ' + $startTime.val(), "hh:mm tt");
var endTime = $endTime.timepicker ? $endTime.timepicker('getTimeAsDate') : Date.parse('01 jan 01 ' + $endTime.val(), "hh:mm tt");
var duration = (endTime - startTime) / 1000 / 60;
//check whether spanning multiple days
if (startTime > endTime) {
duration = duration + (60 * 24);
}
$durationHours.val(Math.floor(duration / 60));
$durationMinutes.val(duration % 60);
}
}
Я обнаружил, что после выполнения шагов 1 и 2 все в порядке.
Но если я выполню шаг 3, локальной переменной endTime будет назначен объект даты, имеющий компонент времени 11:59, а не 12:00.
Выкл на 1 минуту.
Если я затем перейду к палитре "Время окончания" и выберу "00" в минутной области, как я это сделал в пикировке "Время начала", то истекшее время снова станет правым.
Как интересное наблюдение при отладке, оба таймера отстают на 1 минуту после шагов 1 и 2. То есть они находятся в 5:59 и 11:59. Прошедшее время является правильным, так как разница важна. Но, как уже говорилось, как только пользователь выбирает 00 из области часов, он, кажется, "исправляется" для этого сборщика, и разница уменьшается на 1 минуту (пока то же самое не будет сделано для другого сборщика).
Даты Javascript сложны! Помощь была бы отличной.
1 ответ
Да, разобрался. Я предполагаю, что это самоуверенный компонент, который придерживается мнения, что пользователь должен выбрать число минут из области минут. Потому что если они этого не сделают, минуты будут -1.
Справедливо.
Чтобы исправить эту ошибку, в обработчике onSelect я написал код, подобный следующему:
$('#timepicker').timepicker({
onSelect: function (time, inst) {
if (inst.minutes < 0)
inst.minutes = 0;
}
});
В нашем приложении, если они не выберут "00" или другие минуты, предполагается, что это будет 0.