2013-12-13 57 views
0

我們將日期存儲在數據庫中,日期與「1970年1月1日」之間的差異以分鐘爲單位。如何修復MS SQL Server 2008R2/2012和Javascript之間的日期差異

我這裏還有結果從同一臺機器:

--TSQL (MS Sql Server 2008R2) 
SELECT DATEADD(minute, 22572765, '1-Jan-1970'); -- gets 1-Dec-2012 12:45:00.000 

//JS (Chrome) - assume minDate = 1-Jan-1970 
new Date(minDate.getTime() + (22572765 * 60 * 1000)) -- gets me 1-Jan-2013 12:45:00 

什麼是解決矛盾的最佳途徑?

回答

2

這聽起來好像你minDate是錯誤的,因爲這樣的:

new Date((new Date(1970, 0, 1)).getTime() + (22572765 * 60 * 1000)) 

...給我1日 - 12月2012 12:45:00.000 GMT。

在JavaScript中,month的值是從零開始的,所以如果你正在用new Date(1970, 1, 1)構建minDate,那就是爲什麼你是一個月了。


還要注意的是,除非你使用的東西UTC變種(getUTCYear等),JavaScript的日期會給你的日期當地時區版本的輸出(您的方式構建日期除了minDate以外,它只是在輸出時需要小心)。

+1

你是一個傳奇人物。 – user1514042

+0

是否有任何情況下,當奇偶校驗被破壞(閏年,DST等)或一切都被照顧? – user1514042

+0

@ user1514042:DST不會以自時代值進入。閏年得到處理。 JavaScript使用[外推公曆日曆](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.3)。天總是正好86,400,000毫秒(沒有閏秒)。 –