2014-09-19 45 views
3

以下是方案 - 我將PHP中的默認時區設置爲UTC。除了一個與我一起工作的日期/時間外,其餘所有日期都設置爲當前UTC時間;當稍後顯示時,我爲該特定用戶設置時區,並且日期出現在他們的時區中。很棒。更改時區而不更改DateTime對象的值

除了我有一個日期/時間,用戶可以在窗體上輸入。它在24小時內以「YYYY-MM-DD HH:MM」的形式出現(例如:「2014-09-18 17:00」)。用戶自然而然地將時間設置在他們的時區中,而不是UTC。

如果我使用輸入值創建了一個新的DateTime對象,它將以UTC保存,因此稍後顯示時會關閉幾個小時(取決於原始時區)。如果我在新對象上設置時區,則它會更改該值,並再次假定輸入值爲UTC。

我已經做了一些Google搜索,但沒有發現任何關於PHP(我找到了幾個C#的答案)。這可能與DateTime對象(或與碳)?我是否堅持根據用戶當前的時區進行手動加/減小時數,以便首先將其放置在UTC中?

回答

7

您必須在創建DateTime對象時設置時區,而不是創建時;然後將DateTime對象更改爲UTC時區並將其保存爲db:

# create DateTime based on user timezone 
$dt = new DateTime('2014-09-18 17:00', new DateTimezone('Australia/Sydney')); 
# change time to UTC timezone 
$dt->setTimezone(new DateTimezone('UTC')); 
+0

不知何故,我完全錯過了DateTime構造函數中的該選項。謝謝! – 2014-09-22 18:00:46