为什么时差会给我2个不同的结果

时间:2013-02-22 18:11:27

标签: javascript time datediff

此代码应该给0:40分钟,但是在某种程度上给我0:20分钟,而在另一种方式给我1:40分钟。

var t1 = '12:05'.split(':'),
    t2 = '12:45'.split(':');

var d1 = new Date(0,0,0,t1[0],t1[1]),
    d2 = new Date(0,0,0,t2[0],t2[1]);

document.write(d1+'<BR>');
document.write(d2+'<BR>');

var d = new Date(d1-d2);
// should give 0:40 minutes
document.write(d.getHours() + ":" + d.getMinutes() + '<BR>');
// 0:20 minutes
var d = new Date(d2-d1);
document.write(d.getHours() + ":" + d.getMinutes() + '<BR>');
// 1:40 minutes

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

减去两个日期可以得到它们之间的毫秒数。将此传递给new Date会为您提供一个新的日期对象,距离纪元很多毫秒。

如果您想要两个日期之间的分钟数,请执行以下操作:

(d1-d2)/(60*1000);

答案 1 :(得分:2)

您可以编写自己的函数来计算两个日期差异,并以HH:MM格式显示结果。

因为Javascript在时间戳中返回两个日期差异&amp;如果我们使用该时间戳获取JS日期对象,则会创建全新的日期。

以下是dateDiff函数示例:

function dateDiff(){
    var start = '12:05'.split(':'), // hardcoded value for sample
    end = '12:45'.split(':');      // you can pass start and end value as parameter to dateDiff function.

    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);
}