2012-03-21 102 views
1

關於時間已經有很多問題,但我仍然找不到能回答我的問題的問題。所以,如果這是重複,我必須道歉。我的問題是這樣的:JavaScript日期對象是否將輸入日期字符串識別爲UTC時間或本地時間?

我有一個名爲postDate的MySQL表列,其格式爲datetime。我的服務器在系統時間(UTC)。我有以下的PHP腳本:

<script type='text/javascript'> 
var expiry = new Date('$postDate'); 
alert(expiry); 
</script> 

$postDate = date("r", strtotime($postDate)); // sorry forgot to add this line 

我只是想知道,假設$postDate2012-03-30 01:00:00,並且客戶端上的+ 8小時時區,他會怎樣對警報看到了什麼?即對象識別datestring作爲UTC時間還是本地時間?

+0

你爲什麼不試試呢?更改計算機時鐘設置並運行腳本。或者嘗試用硬編碼的字符串運行它。 – 2012-03-21 09:43:38

回答

2

根據用戶的區域設置,這將失敗,結果爲「無效的日期」。

相反,你應該通過一個時間戳。時間戳始終以UTC表示。要從datetime格式獲得時間戳,請通過strtotime()運行。但請記住,JS以毫秒爲單位來做時間戳,而不是秒,因此您必須在最後添加額外的000

所以基本上:

$postDate = strtotime($postDate)."000"; 

警報仍將取決於用戶的時區的結果,但它會從你給UTC時間戳正確偏移。例如,如果時間戳是1AM UTC,但用戶是UTC + 8,他們將看到9AM。

+0

感謝您的解釋。我不知道'datestring'必須是一個時間戳。 – 2012-03-21 09:54:57

+0

它不是「有」,但它更容易,因爲它不依賴於區域設置。 – 2012-03-21 09:56:06

1

enter image description here是的,it does work,太棒了。在小提琴中只有2行代碼。

+0

警報顯示「日期無效」。它不起作用。 – 2012-03-21 09:44:00

+0

@Kolink它在我的瀏覽器上發出警報,在更新的答案中看到圖片 – Joseph 2012-03-21 09:46:17

+0

我在我的答案中解決了格式問題 - 僅僅因爲它適用於一個區域中的一個人,並不意味着它適用於所有人。 – 2012-03-21 09:48:05

相關問題