2012-01-06 331 views
0

這裏有一些代碼用於計算兩個日期之間的小時差。有點在這裏虧本。代碼被擊中或錯過,我不知道爲什麼。日期時間之間的差異

var date = tr.find('td:eq(10) input').val(); 
var time = tr.find('td:eq(10) option:selected').val(); 
var d1 = parseDate(date,time); 
date = tr.find('td:eq(11) input').val(); 
time = tr.find('td:eq(11) option:selected').val(); 
var d2 = parseDate(date,time); 
var diff = d2.getTime() - d1.getTime(); 
var hoursTd = tr.find('td:eq(12)'); 
hoursTd.html((diff/3600000).toFixed(2)); 

datetime已正確安裝,從jQuery UI的日期選擇器和一個簡單的下拉與價值觀下午2:30,下午2:45,下午3:00,等它正常工作時的日期是拉動相同,但有時在日期不相同的情況下增加10的量級。例如:

01/11/2011上午10:30 - 01/11/2011上午11:00 = 0.50(正確)

01/10/2011上午10:30 - 01/11/2011 11:00 AM = 24.50(修正)

01/09/2011上午10:30 - 01/11/2011上午11:00 = 264.50(錯誤)

01/08/2011 10: 30 am - 01/11/2011 11:00 am = 264.50(錯誤)

01/07/2011 10:30 am - 01/11/2011 11:00 am = 96.50(正確)

編輯,哦,我的,我很抱歉。沒有包含parseDate函數。

// Date m/d/Y Time h:m a 
function parseDate(date,time) { 

date = date.split("/"); 
time = time.split(" "); 
hm = time[0].split(':'); 
if (parseInt(hm[0]) == 12) { 
    hm[0] = 0; 
} 
if (time[1] == 'pm') { 
    hm[0] = parseInt(hm[0]) + 12; 
} else { 
    hm[0] = parseInt(hm[0]); 
} 
return new Date(
    parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]), 
    hm[0], parseInt(hm[1]) 
); 
} 

編輯好的,所以parseInt是罪魁禍首。 parseInt("09")返回0.所以"08"。奇怪的是,parseInt("07")返回7.並且1-6也正確返回。有人告訴Javascript。

+1

如何'parseDate'界定? – Gumbo 2012-01-06 17:41:27

+0

提及包含所有函數定義的完整代碼... – 2012-01-06 17:43:45

+0

做一些更多的調試:顯示/警告/記錄d1和d2的值,以確保正確讀取輸入設置。此外,您可能想確保diff是一個正數。 – 2012-01-06 17:44:30

回答

1

問題是你的日期[1]上的parseInt()正在使用前導零。

return new Date(
    parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]), 
    hm[0], parseInt(hm[1]) 
); 

當你通過像01/09/2011日期,09被解析爲0,而不是9

+0

我想你可能是對的。但你如何解釋這一點? 06/09/2010上午11:30 - 2010年5月31日星期一11:30:00 GMT-0400(EDT),06/07/2010上午11:30 - 2010年6月1日星期一11:30:00 GMT-0400 (EDT)我不能格式化評論嗎?無論如何,它解析09錯誤,但07正確嗎? – 2012-01-06 19:23:00

+0

哇,這很有趣。 parseInt(「09」)返回0,但parseInt(「07」)返回7. – j08691 2012-01-06 19:28:36

+1

更改您的parseInts以指定基數。例如。 parseInt(date [1],10)有關更多信息,請參見https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt。 – j08691 2012-01-06 19:36:04

0

date.js解決您的問題:

var first = Date.parse(01/09/2011 10:30 am); 
var second = Date.parse(01/11/2011 11:00 am); 
var diffMs = Math.abs(first - second) // difference in milliseconds