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。