2012-09-04 102 views
2

嗯,我知道這個問題可能會被提出很多次,但我肯定沒有懷疑在我看來,順便說一句,不要評論我所嘗試過的,我已經嘗試了很多方法,但我只是問什麼是正確和簡單的方法,因爲有很多帖子在這裏徘徊在這裏與不同的建議,以完成這些任務,所以我會explode()我的問題到更小的問題...根據用戶處理PHP時區

所以你可以人只是引導我在哪裏去對或錯,因爲當涉及到日期/時間時,很多人都很困惑

1)爲什麼/如何使用PHP在MySQL中節省時間? 個人爲此我發佈這個使用PHP $year/$month/$day和檢查日期使用checkdate()在MySQL日期字段。所以它是好的,或者我應該使用timestamp和爆炸檢索字符串前端使用PHP?

2)如果我從印度運行服務器,我應該使用date_default_timezone_set("Asia/Calcutta");記錄默認時間,並且使用php函數減去並添加時間,或者只發布時我應該檢查從用戶選擇的用戶時區,並相應地設置條件:

if(timezoneselected == +5.30) { 
echo date_default_timezone_set("Asia/Calcutta"); 
} elseif(timezoneselected == +anytime) { 
echo another country timezone 
} 

3)最後一個問題是如何像gmail facebook等網站管理時間?我的意思是,如果他們根據服務器保存日期時間,而不是每個用戶顯示完美髮布時間的方式,即使是gmail,如果我向其他用戶發送郵件,我的發送時間和居住在其他國家/地區的人員將在他本地打印的本地一次,我的意思是,我們如何能做到這一點,很抱歉我不能解釋你完全說這個例子,

Facebook的:從印度郵政 用戶,Facebook的支持顯示了8分鐘前,9mins前,罰款後的某個時候,他們表現出真正的日期和那個日期是完美的根據我發佈的時間,但是如果一個來自美國的人更新,說8分鐘前9分鐘前他的個人資料,但他原來的發佈時間正確地顯示給他,甚至正確地對我?

對這個問題感到抱歉,但真的這會幫助我理解這個日期/時間的概念,也將有助於未來的用戶。謝謝!

+0

我個人在表中做了d/m/y字段,所以我可以在獲取值給php時製作任何格式。它還幫助我通過查詢輕鬆完成訂單。當我需要精確時間進行比較或者需要對時間進行計算(使用sql函數)時,我只使用時間戳,例如選擇5小時前的某些內容和類似的查詢。 – cen

回答

4

底線是,你應該店一切UTC

當你爲特定用戶顯示時間,使用自己選擇的時區。存儲用戶的時區,如「亞洲/加爾各答」,並簡單地使用date_default_timezone_set方法轉換顯示時間。

我會嘗試從這裏的評論中回答你的問題。

您一直存儲所有UTC。這是基準。當您顯示與基於用戶轉換的任何內容相關的時間時。如果你想顯示發佈8分鐘之前那麼你正在採取當前UTC時間和與帖子相關的UTC時間之間的增量。如果您從用戶A(在印度)向用戶B(在美國洛杉磯)發送消息,那麼您將使用UTC存儲消息時間。如果用戶A正在查看它,時間將被轉換爲「亞洲/加爾各答」,如果用戶B正在查看它,時間將被轉換爲「America/Los_Angeles」。使用UTC會讓你的生活變得更容易。相信我。

+0

好吧,我是問,如果我節省了所有使用utc的時間,現在你說我應該給用戶一個選項來選擇他們的時區,因此從sql檢索到的數據後+/-?如果我想要顯示8分鐘前用戶發佈的內容,這項任務是否也會完成?9幾點鐘後,我將顯示實時?此外,如果用戶將消息發送給具有不同時區的另一個用戶呢?將PHP平衡爲兩個用戶設置的時區? –

+1

如果兩個用戶互相通信,他們在不同時區的事實並不重要。任何存儲日期都以UTC格式存儲,因此只需將每個用戶的date_default_timezone_set設置爲他們自己的時區並使用DateTime對象即可。例如:'$ date = new DateTime($ theDateInUTC); $ date-> format('d/m/y h:i:s');'。那麼看着這個日期的人會相對於他們自己來看它。 – temporalslide

+0

感謝兄弟,我使用'gmdate()'並根據用戶爲他設置的時區使用條件添加或減去偏移量。btw使用過程...我現在都清楚了,我會在我的數據庫中使用'gmdate'存儲日期和時間,然後根據他/她的設置設置默認時區或向他顯示默認時區:)並且任何想法建議他/她設置時區,有點用他的ip知道他在哪裏登錄..?或者我應該讓他選擇自己的時區? –

1

MySQL Server Time Zone Support描述:

當前會話時區設置影響顯示和那些區敏感的時間值的存儲。這包括由功能(如NOW()CURTIME())顯示的值以及存儲在TIMESTAMP列中的值以及從TIMESTAMP列中檢索的值。 TIMESTAMP列的值將從當前時區轉換爲UTC存儲,並從UTC轉換爲當前時區以供檢索。

因此,如果您使用TIMESTAMP類型列,MySQL將自動爲您處理時區轉換:只需設置會話適當的時區在其time_zone變量。