2013-03-21 48 views
2

正在處理一個大型應用程序時,我試圖使日期時間戳與當前用戶時間保持一致。所以如果活動ID在下午3:00進行,則每個用戶在3:00 PM如何計算大型應用程序的時區偏移量?

看到它所以這裏是解決步驟的問題。對此,如果我的方向不正確,請糾正我或讓我走向正確的方向。

  1. 將所有日期時間存儲在MySql中作爲UTC時間。

  2. 與當前偏移錶店時區。例如

    zone_id zone_name utc-offset 
    1  Central -6 
    
  3. 在我的用戶表我有一個字段user_time_zone_id並在該領域我將在用戶設置爲「1」的值,它會說,這個用戶正在使用「中央系統「 位置。

  4. 在我的PHP應用程序配置我的默認時區設置爲UTC這樣

    date_default_timezone_set('UTC'); 
    
  5. 一旦我打開這個應用程序,我定義用戶偏移和每個日期時間出去放我做的計算時間。例如date('Y-m-d', strtotime($current_offset.' hour')) where $current_offset = -6,因爲它是在頁面加載時由用戶配置文件定義的。

這是我的問題。

是我的方法解決這個問題是否正確? 有沒有更好的方法來做到這一點? 如何計算夏令時?請記住,該國有部分地區沒有夏令時。

+1

不要手動進行偏移。使用date_default_timezone_set()將應用程序設置爲用戶的時區。有[時區的特質(http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result/6841479#6841479)你不該不會浪費你的時間來計算PHP何時會自動執行。 –

+0

哦,這是個好主意。所以將頁面設置爲當前用戶設置,然後當用戶加載頁面時,他們的一切都將轉換爲他/她當前的日期時間。但是等待他們想要編輯日期時間字段時會發生什麼? – Jaylen

+0

我不建議爲此使用'date_default_timezone_set',這可能會導致問題和混淆,因爲當您的數據庫中的日期與放入PHP時位於不同的時區時。它也可能會混淆意想不到的事情,例如,日誌文件輸出中的時間戳。 – Adrian

回答

1

我也有過類似的事情一次,它結束了是一個痛苦的嘗試跟蹤用戶的時區和夏令時,尤其是當你一半的客戶是在AZ不具有夏令時。我不知道這對你是否可行,但我最終做的只是將所有內容都存儲在UTC中,然後使用JS將其轉換爲用戶當地時間,並使用Date對象。它是通過ajax調用完成的,但如果需要,也可以使用echo a document.write

+0

如果您正確設置時區,偏移就可以了。 –

0

你不應該需要使用date_default_timezone_set,使用對時區的原生支持的PHP DateTime class。或者像@romo說的那樣,你可以在JavaScript中的客戶端上完成。

+0

我如何爲此PHP用戶使用PHP DateTime類?我對這個班不熟悉,從不使用它。你能否詳細說明如何使用它來解決我的問題?謝謝 – Jaylen

+0

在我原來的文章中,它鏈接到了該課程的PHP手冊頁面,它解釋瞭如何使用它。你用你的日期初始化並調用'setTimezone',它會自動轉換到指定的時區。然後,您可以將移出的日期取出或直接使用format格式方法格式化,而不需要使用'date()'。 – Adrian

+0

好吧,所以我試圖按照這個例子,我沒有得到任何時間的變化,這是我迄今爲止做的$ user_time_zone = new DateTimeZone('Europe/Warsaw'); $ schedule_date = new DateTime($ call ['triggerOn'],$ user_time_zone); echo $ schedule_date-> format('Y-m-d h:i A')。時間不在轉換。我遵循你的想法嗎? – Jaylen