2011-01-13 45 views
1

,所以我在mysql中的時間戳是:MySQL的時間戳爲JavaScript日期不轉換正確

SELECT `tsdate`, UNIX_TIMESTAMP(`tsdate`) FROM t1 
2010-11-07 21:50:05, 1289191805 

如果我嘗試使用以下,則顯示錯誤的時間/日期

var newDate = new Date(); 
newDate.setTime(1289191805000); 
dateString = newDate.toUTCString(); 
alert(dateString); 

Mon, 08 Nov 2010 04:50:05 GMT 

我怎樣才能讓JavaScript顯示正確的日期?

我目前使用工具highcharts來繪圖,它也顯示錯誤的日期/時間(它用JavaScript編寫)。我不想更改highcharts的代碼,但如果需要,我會。

謝謝,約什

+0

什麼時區是應該在的時間戳?它是否也是UTC? – 2011-01-13 14:58:56

+0

如果你住在GMT-7時區的地方,使用`.toString()`會產生正確的時間! – Thai 2011-01-13 15:01:36

回答

0

我找到了解決辦法,在http://highslide.com/forum/viewtopic.php?f=9&t=8613

Highcharts.setOptions({ 
    global: { 
     useUTC: false 
    } 
}); 

我也想感謝安東尼·格里斯特和Seldaek一些有用的代碼!

var newDate = new Date(); 
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000)); 
dateString = newDate.toUTCString(); 
alert(dateString); 
2

它看起來像你有一個時區問題。正如你看到的JavaScript是GMT,而我懷疑你是美國西部時間?

嘗試在你的MySQL查詢以下內容:

SELECT UNIX_TIMESTAMP(CONVERT_TZ(tsdate, '-07:00', 'GMT')) FROM t1 

-07:00可以通過你在任何時區標識符來代替

另一種解決方案可能是做newDate.setTime(mysqlTimestamp + 7*3600000)在JavaScript中。只在那裏調整它。

0

如前所述,使用toString會在本地時間返回它,但它也會有額外的時區信息。在本地時間顯示它,沒有額外的時區信息,就是使用getTimezoneOffset()(以分鐘爲單位返回一個值)乘以60(以秒爲單位)乘以1000(以毫秒爲單位)

var newDate = new Date(); 
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000)); 
dateString = newDate.toUTCString(); 
alert(dateString);