2014-02-05 40 views
3

我已經問過一個非常類似的問題,但沒有得到任何幫助。用戶在當地時區查看

我有一個網站,允許用戶發佈筆記。這些筆記上會有一個時間戳。我服務器上的默認時區爲EST5EDT(儘管我將date.timezone設置爲其他內容,這是一個不同的問題!)。

據我所知,最好用服務器時間設置時間戳並將其轉換爲每個用戶。例如:

User 1 (GMT) posts "Hello World" at (local time) 5:00 (server time) 0:00 
User 2 (AEST, +10) sees that User 1 posted "Hello World" at (local time) 15:00 

爲了辯論的緣故,我避免擔心DST,因爲我不認爲這是值得的。

我知道我可以在我的應用程序中使用date_default_timezone_set(),但我很確定我應該將發佈時間設置爲服務器時間,因此不需要更改設置的時區。

我只是想將時間轉換爲觀衆

"Post as Server Time, Read as Local Time" 

我不相信我是誰擁有了自己的Web應用程序執行此所以必須有一個答案在那裏的第一人。

我將必須得到發佈的日期時間,獲取用戶查看帖子的時區(可能通過javascript,因爲php使用服務器端的日期和時間),並使用用戶的時區轉換日期時間。

getTimezoneOffset()在JavaScript中可以計算出用戶與UTC的時差,但不能從我的服務器時間算出。

+0

也許一些有用的信息的http://計算器.com/a/9849447/1468708 –

+0

哪些數據類型是否存儲時間戳? –

+0

timestamp存儲在mysql數據庫中,日期時間 – Wildcard27

回答

1

你可以做的是保存在保存時UTC時間和觀看時顯示UTC時間+偏移量。 這可以在客戶端使用JS來完成。保存時使用

JS方法= UTC()

顯示時使用

JS方法=

<html> 
<head> 
<script type="text/javascript"> 
     function showDateInClientSideFormat(dValue) 
     { 
      var d = new Date() 
      var n = d.getTimezoneOffset(); 
      var dateClientSide = new Date(dValue +n); 
      return dateClientSide; 
     } 
    </script> 
</head> 
<body> 
<?php 
echo '<script> showDateInClientSideFormat($dateSaved); </script>'; 
?> 
</body> 
</html> 

PS:UTC時間是相同的GMT時間

+0

這越來越近了。 'var dateClientSide'然後必須通過php傳遞,因爲我將使用while循環來顯示所有帖子。有任何想法嗎? – Wildcard27

+0

更好的想法是將這段代碼封裝在一個像showDateInClientSideFormat($ dateSaved)這樣的JS函數調用中,並在PHP循環中調用該函數。請注意,您必須在PHP代碼調用之前定義函數 – DhruvJoshi

+0

這真的會變成一個令人頭痛的問題,並且也有點混亂!我想你的意思是在我的while循環中使用'echo「'無論何時顯示註釋日期? – Wildcard27