jQuery UI 时间选择器关闭 1 分钟
jQuery UI Timepicker off by 1 minute
我正在维护一个使用 jQuery UI Timepicker 的应用程序并试图解决一个错误。
基本上,这是重新创建它的方法:
有 2 个时间选择器,开始时间和结束时间
1. 开始时间,select6:00am(来自小时区)
2.关于结束时间,select12:00pm(来自小时区)
3. 从分钟区
回到开始时间和select00
然后运行一些代码以确定经过的时间(以分钟为单位)。该代码是:
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 分钟。
如果我然后转到 End Time 选择器并从 分钟区域 转到 select 00,就像我做的那样开始时间 选择器,经过的时间再次正确。
作为调试时的一个有趣观察,两个时间选择器在步骤 1 和 2 之后都落后 1 分钟。也就是说,它们位于 5:59 和 11:59。经过的时间是正确的,因为差异很重要。但是正如所说,一旦来自 小时区域 的用户 selects 00,该选择器似乎 "right itself" 并且差异为 1分钟(直到对另一个选择器完成相同的操作)。
Javascript约会好难!帮助会很棒。
是的,明白了。我想这是一个固执己见的组件,它认为用户必须 select 来自 分钟区域 的分钟数字。因为如果他们不这样做,分钟数将为 -1。
很公平。
为了修复这个错误,在 onSelect 处理程序中,我写了一些类似的代码:
$('#timepicker').timepicker({
onSelect: function (time, inst) {
if (inst.minutes < 0)
inst.minutes = 0;
}
});
在我们的应用程序中,如果他们不 select '00' 或任何其他分钟,它将被假定为 0。
我正在维护一个使用 jQuery UI Timepicker 的应用程序并试图解决一个错误。
基本上,这是重新创建它的方法:
有 2 个时间选择器,开始时间和结束时间
1. 开始时间,select6:00am(来自小时区)
2.关于结束时间,select12:00pm(来自小时区)
3. 从分钟区
然后运行一些代码以确定经过的时间(以分钟为单位)。该代码是:
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 分钟。
如果我然后转到 End Time 选择器并从 分钟区域 转到 select 00,就像我做的那样开始时间 选择器,经过的时间再次正确。
作为调试时的一个有趣观察,两个时间选择器在步骤 1 和 2 之后都落后 1 分钟。也就是说,它们位于 5:59 和 11:59。经过的时间是正确的,因为差异很重要。但是正如所说,一旦来自 小时区域 的用户 selects 00,该选择器似乎 "right itself" 并且差异为 1分钟(直到对另一个选择器完成相同的操作)。
Javascript约会好难!帮助会很棒。
是的,明白了。我想这是一个固执己见的组件,它认为用户必须 select 来自 分钟区域 的分钟数字。因为如果他们不这样做,分钟数将为 -1。
很公平。
为了修复这个错误,在 onSelect 处理程序中,我写了一些类似的代码:
$('#timepicker').timepicker({
onSelect: function (time, inst) {
if (inst.minutes < 0)
inst.minutes = 0;
}
});
在我们的应用程序中,如果他们不 select '00' 或任何其他分钟,它将被假定为 0。