我正在维护一个使用jQuery UI Timepicker并尝试解决错误的应用程序。
基本上,这是如何重新创建它:
有 2 个时间选择器,开始时间和结束时间
1. 在开始时间,选择 6:00am(从小时区)
2. 在结束时间,选择 12:00pm(从小时区)
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 步和第 2 步之后都落后了 1 分钟。也就是说,它们分别位于 5:59 和 11:59。经过的时间是正确的,因为差异很重要。但正如所说,一旦用户从hours area中选择 00 ,该选择器似乎会“正确”,并且差异会减少 1 分钟(直到其他选择器完成相同的操作)。
Javascript 日期很难!帮助会很棒。