0

我正在维护一个使用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 日期很难!帮助会很棒。

4

1 回答 1

0

是的,想通了。我想这是一个固执己见的组件,它认为用户必须从分钟区域中选择一个分钟数字。因为如果他们不这样做,分钟数将为-1。
很公平。

为了修复这个错误,在 onSelect 处理程序中,我编写了一些类似的代码:

$('#timepicker').timepicker({
        onSelect: function (time, inst) {                 
            if (inst.minutes < 0)
                inst.minutes = 0;
        }
});

在我们的应用程序中,如果他们不选择“00”或任何其他分钟,则假定为 0。

于 2017-08-07T06:36:36.273 回答