2014-09-19 132 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