JavaScript两次错误时间显示

时间:2015-06-04 13:38:10

标签: javascript jquery

我试图在页面加载时显示两次之间的时间。 请在下面查看我的代码 -

var start = document.getElementById("start").value;
var end = document.getElementById("end").value;

function hourDiff(start, end) {
    start = start.split(":");
    end = end.split(":");
    var startDate = new Date(0, 0, 0, start[0], start[1], 0);
    var endDate = new Date(0, 0, 0, end[0], end[1], 0);
    var diff = endDate.getTime() - startDate.getTime();
    var hours = Math.floor(diff / 1000 / 60 / 60);
    diff -= hours * 1000 * 60 * 60;
    var minutes = Math.floor(diff / 1000 / 60);
    
    return (hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes;
    //setTimeout(function(){hourDiff(start, end)},500);
}

document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM -->
<input id="end" value="09:30"> <!-- 09.30 AM -->

<input id="diff">

我使用了开始时间20.00和结束时间09.30两次之间的差异是13.30小时,但它显示错误的小时。请检查并告知我们。

修改

此外,我想了多少hour:minute:second

3 个答案:

答案 0 :(得分:2)

如果您的日期始终采用相同的格式hh:mm,为什么不尝试我的建议。

这很简单:

var hours = end[0] - start[0];
if(start[0] > end[0]) {
    hours = 24 + hours;
}

var minutes = end[1] - start[1];
if(start[1] > end[1]) {
    minutes = 60 + minutes;
    if(hours == 0) {
        hours = 23;
    } else {
        hours--;
    }
}

我只是将它们相互减去,并在起始值大于结束值时作出反应。 小提琴:https://jsfiddle.net/rvwr9h0w/1/

<强> 修改

我找到了一个更简单的解决方案,因为Shotgun Ninja的帖子:

https://jsfiddle.net/rvwr9h0w/4/

var endDate = new Date(0, 0, (start > end)?1:0 , end[0], end[1], end[2]);

如果开始时间大于结束时间,则只需提前1天设置结束日期。

答案 1 :(得分:1)

好的,这里代码的问题在于您从较晚的时间减去较早的时间,这会导致负时间差。我认为你打算做的是让系统从上一天晚上8点在前一天上午9:30 减去,但你没有提供任何信息。表明他们是分开的日子。

你有:

var startDate = new Date(0, 0, 0, 20, 0, 0); // 8:00pm, Dec 31st, 1899 (current TZ)
var endDate = new Date(0, 0, 0, 9, 30, 0);    // 9:30am, Dec 31st, 1899 (current TZ)

(年= 0对应1900,月= 0对应1月,日= 0对应1日前1天,回滚至12月31日。)

这里重要的一点是,通过将所有值设置为0,您可以获得同一天,但会有不同的时间。所以你实际上在diff中得到了值;代码正常运行,但由于日期不按顺序,因此会给你一个负小时值。

答案 2 :(得分:-2)

尝试使用Math.floor以及每个部分所需的全部数学公式:

var start = document.getElementById("start").value;
var end = document.getElementById("end").value;

function hourDiff(start, end) {
    start = start.split(":");
    end = end.split(":");
    var startDate = new Date(0, 0, 0, start[0], start[1], 0);
    var endDate = new Date(0, 0, 0, end[0], end[1], 0);
    var diff = endDate.getTime() - startDate.getTime();
    var msec = diff;
var hh = Math.floor(msec / 1000 / 60 / 60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec / 1000 / 60);
    
    return hh + ":" + mm;
    //setTimeout(function(){hourDiff(start, end)},500);
}

document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM -->
<input id="end" value="09:30"> <!-- 09.30 AM -->

<input id="diff">