我正在维护一个使用jQuery UI Timepicker并尝试解决错误的应用程序。
基本上,这是重新创建它的方法:
有2个时间戳,开始时间和结束时间
1.在开始时间,选择上午6:00(来自小时区域)
2.在结束时间,选择中午12:00(从小时区域)
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分钟。
如果我转到结束时间选择器并从分钟区域中选择00,就像我使用开始时间选择器一样,已经过去的时间权利本身。
作为调试时的有趣观察,在步骤1和2之后两个时间戳都落后1分钟。也就是说,它们是在5:59和11:59。经过的时间是正确的,因为差异很重要。但正如所说,一旦用户从小时区域中选择00,它似乎就会自己“#34;对于那个选择器,差异是1分钟(直到另一个选择器完成相同的事情)。
Javascript日期很难!帮助会很棒。
答案 0 :(得分:0)
是的,想通了。我想这是一个自以为是的组件,它认为用户必须从分钟区域中选择分钟数字。因为如果他们不这样做,则会议记录为-1 很公平。
为了解决这个问题,在onSelect处理程序中,我写了一些类似的代码:
$('#timepicker').timepicker({
onSelect: function (time, inst) {
if (inst.minutes < 0)
inst.minutes = 0;
}
});
在我们的应用中,如果他们没有选择“00”&#39;或任何其他会议记录,将被假定为0。