【问题标题】:Why do I get +1 hour when calculating time difference in javascript?为什么在javascript中计算时差时会得到+1小时?
【发布时间】:2012-12-15 16:01:13
【问题描述】:

我试图创建一个非常简单的时差计算。只是“结束时间 - 开始时间”。我得到了+1小时。我怀疑它与我的时区有关,因为我是 GMT+1。

无论如何,这不应该影响差异,因为开始时间和结束时间都在同一个时区。

在此处查看我正在运行的示例代码:

http://jsfiddle.net/kaze72/Rm3f3/

$(document).ready(function() {
    var tid1 =  (new Date).getTime();

    $("#tid").click(function() {
        var nu = (new Date).getTime();
        var diff = new Date(nu - tid1);
        console.log(diff.getUTCHours() + ":" +
                diff.getUTCMinutes() + ":" +
               diff.getUTCSeconds());  
        console.log(diff.toLocaleTimeString());
    });
})

【问题讨论】:

  • 考虑使用Date.now() 而不是(new Date()).getTime()

标签: javascript time


【解决方案1】:

您必须了解Date 对象代表什么以及它如何存储日期。基本上每个Date 都是自 1970 年以来的毫秒数(所谓的纪元时间)的薄包装。通过从另一个日期中减去一个日期,您不会得到日期:您只是得到两者之间的毫秒数。

话虽如此,这条线没有多大意义:

var diff = new Date(nu - tid1);

你真正需要的是:

var diffMillis = nu - tid1;

...然后简单地提取秒、分钟等:

var seconds = Math.floor(diffMillis / 1000);
var secondsPart = seconds % 60;
var minutes = Math.floor(seconds / 60);
var minutesPart = minutes % 60;
var hoursPart = Math.floor(minutes / 60);
//...
console.log(hoursPart + ":" + minutesPart + ":" + secondsPart);  

Working fiddle.

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多