JavaScript错误的时间显示在两个时间之间

JavaScript incorrect time showing between two time

本文关键字:时间 两个 之间 错误 显示 JavaScript      更新时间:2023-09-26

我尝试在页面加载时显示两个时间之间的时间。请检查下面我的代码-

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

如果你的日期都是相同的格式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天。

好的,这里代码的问题是,您正在从较晚的时间减去较早的时间,这将导致负时差。我认为你的意思是让系统从前一天的晚上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)

(Year = 0对应1900,Month = 0对应1月,Day = 0对应1号前1天,回滚到12月31日)

这里重要的部分是,通过将所有值设置为0,您将获得相同的一天,但不同的小时。所以你实际上得到了一个负的值;代码正常运行,但由于日期顺序颠倒,因此给出的小时值为负。

尝试使用数学。楼面与各部分所需的整个数学方程:

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">