2012-01-19 120 views
1

我想在javascript中做一個與excel相匹配的日期計算。Excel和JavaScript的日期計算不同

//Excel 
=(EDATE(DATE(2000,6,1),60)-DATE(2012,1,20)) 

這給出了-2424

結果所以我嘗試做同樣的計算中的JavaScript與以下

//Javascript - using datejs library 
a = Date.parse('2000/06/01').addMonths(60); 
b = Date.parse('2012/01/20'); 
a.setHours(12,0,0); 
b.setHours(12,0,0); 
span = new TimeSpan(a - b); 
console.log(span.getDays()); 

這給出了-2423

我結果看不出爲什麼我輸了一天。 任何人都可以闡明如何發生這種情況。

提前爲任何幫助而歡呼。 :)

+1

你可以嘗試打印出EDATE()和addMonths()計算出來的東西嗎? –

+0

excel的結果是正確的:從2005-06-01開始,你需要30 + 31 + 31 + 30 + 31 + 30 + 31才能到達2006-01-01,然後是365 * 6 + 1(2008閏年)到2012-01-01,然後19天到2012-01-20。 –

回答

1

如果沒有別的,2005年和2008年(兩者都在12月31日)發生了兩次跳躍,這兩種應用都可以考慮在內。你已經明確地將你的JS日期設置爲「中午」,但是沒有爲Excel指定時間,所以它可能默認爲午夜,這是發生跳躍的時間。這會讓您的Excel日期/時間與JS計算結果相距2秒,並且可能會跨越午夜邊界,因此您會錯過一天。

+0

我原本沒有中午設置,但得到了相同的結果,所以在閱讀這裏的一些帖子後,我添加了它,看看它是否會有所幫助,但可惜它沒有。 – dibs

+0

我將javascript中的兩個日期的時間設置爲午夜,並且似乎解決了問題。謝謝你的幫助。 – dibs