计算两次javascript之间的时差

时间:2013-04-24 09:17:03

标签: javascript date time gettime

我正在四处寻找如何做到这一点,我找到了很多复杂代码的例子。 我用这个:

var time1 = new Date();
var time1ms= time1.getTime(time1); //i get the time in ms  

然后我在代码的其他部分执行此操作

var time2 = new Date();
var time2ms= time2.getTime(time2); 

并且最终:

var difference= time2ms-time1ms;
var lapse=new Date(difference);  
label.text(lapse.getHours()+':'+lapse.getMinutes()+':'+lapse.getSeconds());

这很好用,除了一个问题,它给我的时间总是+1,所以我必须添加到代码(time.getHours() - 1)否则它会给我一个小时多......

我认为比其他所有示例都更容易实现...但我仍然不明白为什么我需要添加'-1'才能获得正确的失效。

感谢!!!

2 个答案:

答案 0 :(得分:12)

问题是你的时区。

当您执行new Date(difference)时,您创建了一个Date对象,代表1970年1月1日之后的difference毫秒。当您执行lapse.getHours()您的时区时用于计算。您无法通过Javascript修改您的时区,也无法修改此行为。不是没有一些重的 Javascript技巧。

但是您的difference 代表日期,而差异代表日期。这样处理,并像这样计算小时,分钟和秒:

var hours = Math.floor(difference / 36e5),
    minutes = Math.floor(difference % 36e5 / 60000),
    seconds = Math.floor(difference % 60000 / 1000);

或者,您可以在创建lapse时考虑您的时区:

var lapse = new Date(difference + new Date().getTimezoneOffset() * 1000);

但我不建议这样做:Date对象因你的目的而过度杀伤。

答案 1 :(得分:2)

请注意,在getTimezoneOffset()中会返回一个以分钟为单位的值,因此如果您想使用失效,您可以根据时区差异进行更正:

lapse = new Date(difference); 
tz_correction_minutes = new Date().getTimezoneOffset() - lapse.getTimezoneOffset();
lapse.setMinutes(offset_date.getMinutes() + tz_correction_minutes);

现在你可以这样做:

label.text(lapse.getDate()-1+' days and'  +lapse.getHours()+':'+lapse.getMinutes()+':'+lapse.getSeconds());

打印出人类可读形式的时差