9

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

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”才能获得正确的失误。

谢谢!!!

4

2 回答 2

15

问题是你的时区。

当您这样做时new Date(difference),您正在创建一个Date对象,该对象代表difference1970 年 1 月 1 日之后的精确毫秒。当您这样做时,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对象对于您的目的来说太过分了。

于 2013-04-24T09:20:57.817 回答
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());

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

于 2013-06-21T11:20:49.910 回答