2009-12-31 60 views
1

我有一個社交網站,我一直在PHP/MySQL上工作了幾年,現在我又重新構建了整個網站。這一次,我真的想增加用戶在我的網站上爲時間設置時區的功能。我可以使用PHP在地圖中進行時區設置嗎?

所以說,我要求從指導開始到結束的步驟,我需要包括做這個請。我的舊網站使用mysql日期時間的所有日期和時間,它運作良好,但我讀了最好使用像文本字段和存儲所有日期和時間與UTC,有人可以解釋我怎麼能做到這一點?我仍然可以使用PHP中的now()函數來節省時間到mysql嗎?

此外,我已經看到了PHP可以生成所有時區的列表,它顯示爲一百萬(不是真的),但我想知道,是否有可能顯示某種地圖與圖像或東西並鏈接到主要時區?

請設置用戶時區的任何提示,我可以做那個部分,但是一旦我有一個用戶的時區已保存並準備好使用,我如何確保用戶能夠看到正確的時間,以及如何節省時間正確的時間。

對不起,如果這是混亂,任何幫助將是偉大的,雖然,謝謝。

+0

我不明白你想用時區做什麼。你想允許用戶配置網站以顯示與他們的時區相關的時間或其他內容嗎? – 2009-12-31 16:02:21

回答

2

當使用php時,根據我的經驗,最好將存儲時間戳(使用time()生成)作爲int存儲在數據庫中。雖然在查看數據庫時讀取它們可能並不那麼容易(因爲您無法從數字中猜出實際日期),但時間戳在使用php中的日期時是最原生的。

要保存每個用戶的時區,您可以在幾分鐘內簡單地保存偏移量,以小時或更好(因爲某些時區爲半小時)。所以例如我的時區偏移量應該是+60(UTC + 1),而在美國大部分時間將有類似-480(UTC-8)或類似的東西。

然後,當顯示用戶的時間時,您只需選擇時間戳(使用UTC時間)和時區偏移量,並使用格式化的標準date()函數從中生成可讀日期。

例如:

<?php 
$time = time(); // from database or time() for "now" 
$offset = -480; // from database 

// add the offset to the time you want to display and you have the user's time 
echo date('d.m.Y H:i', $time + $offset * 60); 
?> 

此外,你可以接着還存儲在數據庫中的格式化字符串(d.m.Y H:i),這樣每個用戶都可以選擇他自己喜歡的格式。

+0

我喜歡這個想法,我有一個問題,在你的例子中,你有時間()但是會說從數據庫中,我對這部分感到困惑,不會保存與用戶唯一的東西是偏移量?在你的例子中,gmdate()函數也在執行加/減操作嗎?謝謝 – JasonDavis 2009-12-31 16:21:55

+0

對不起,'gmdate'應該是一個簡單的'date'(正如文中所解釋的),我忘了將它乘以'60'(以秒爲單位進行偏移) - 現在就修正了這個。計算僅針對時間戳進行,因此您可以更改日期函數中的時間戳,使其看起來好像是不同的時間。用數據庫中的'time()'表示,如果你顯示的是帖子或其他內容,那麼你通常會把它存儲在數據庫中,所以在這種情況下它就來自於這個地方;) – poke 2009-12-31 16:46:25

+0

哦,我知道了,我不知道爲什麼我沒有之前,但感謝這應該工作很大 – JasonDavis 2009-12-31 17:10:52

2

如果您考慮夏令時以及您的服務器與您的某些成員位於不同時區,則此主題會變得複雜。

我建議你看看那裏已經建立的一些圖書館來處理這些問題。 PEAR包日期可能是一個很好的開始。 http://pear.php.net/package/Date

基本上,你希望你的會員爲他們的個人資料選擇一個時區。然後將所有時間轉換爲UTC(以刪除服務器位置的偏移量),並將它們作爲時間戳存儲在數據庫中。在顯示時間時,應用成員爲自己選擇的時區偏移(可能以UTC爲默認值)以及日期顯示格式。

相關問題