2012-11-08 69 views
1

我需要使用JavaScript以这种格式获取时间差异:“HH:MM:SS”。字符串日期转换在Javascript中无法正常工作

我已经试过这样:

var diff = Date.parse(time2) - Date.parse(time1); 
var total_time = (diff/1000/60/60) + ":" + (diff/1000/60) + ":" + (diff/1000); 

这:

var diff = new Date(time2) - new Date(time1); 
var total_time = (diff/1000/60/60) + ":" + (diff/1000/60) + ":" + (diff/1000); 

这些时间2和时间1的值:

time1: "2012-11-07 15:20:32.161" 
time2: "2012-11-07 17:55:41.451" 

,并导致我在这两种情况下获得是:

total_time= 0.5250819444444444:31.504916666666666:1890.295 

,你可以看到的是不正确

+0

不要重新发明轮子:) [moment.js(http://momentjs.com/) – Andreas

+0

如果他真的只需要在一个点上的建筑的区别是自己可能比包含另一个库更好。再加上它是很好的运动。 :D – clentfort

回答

1

你忘了删除您已经从diff计算的毫秒数。这是一个非常详细的例子,你如何以一种合适的方式来做到这一点。

var time1 = "2012-11-07 15:20:32.161", 
    time2 = "2012-11-07 17:55:41.451", 

    SECOND = 1000, 
    MINUTE = SECOND* 60, 
    HOUR = MINUTE* 60; 

var diff = new Date(time2) - new Date(time1); 

var hours = Math.floor(diff/HOUR); // Calculate how many times a full hour fits into diff 
diff = diff - (hours * HOUR); // Remove hours from difference, we already caluclated those 
var minutes = Math.floor(diff/MINUTE); // Calculate how many times a full minute fits into diff 
diff = diff - (minutes * MINUTE); // Remove minutes from difference 
var seconds = Math.floor(diff/SECOND); // As before 
diff = diff - (seconds * SECOND); 
var rest = diff; 

var total_time = hours + ":" + minutes + ":" + seconds + " " + rest ; 

DEMO

+0

谢谢,这工作 –

2

我认为你是因为由.划定的日期毫秒部分得到错误的DIFF值。它没有被数据解析器正确接受。

尝试使用日期和时间部分不包括如下毫秒:

var diff = Date.parse(time2.split(".")[0]) - Date.parse(time1.split(".")[0]); 

此外,当您收到错误的区别diff你的时间计算也是错误的。

它应该是:

 var second = Math.floor(diff /1000); 
     //convert the seconds into minutes and remainder is updated seconds value 
     var minute = Math.floor(second /60); 
     second = second % 60; 

     //convert the minutes into hours and remainder is updated minutes value 
     var hour = Math.floor(minute/60); 
     minute = minute %60; 

     var total_time= hour+":" minute+":"+second; 
+0

当我在jsfiddle上运行你的或我的代码时,它会把'2:35:9'放出来,这显然是正确的区别,包括毫秒中的'.'。 – clentfort

+1

谢谢你,你的代码也在工作,但@clentfort有一个较低的评级,所以我会提高他的评价:) :) –

+0

@clentfort:我看不出在计算差异的方式在两个答案的任何区别。正如我强调的那样,它的解析器问题,当您使用'new Date()'时不会出现。 –