将日期转换为其他时区时,您需要存储时间吗?

时间:2012-11-21 18:54:17

标签: php datetime timezone

当使用PHP的DateTime将存储的日期转换为不同的时区时,您是否需要存储时间信息(例如,2012-12-31 00:00:00而不仅仅是2012-12-31)?看来如果我只是存储日期,时区转换是不准确的,所以我不确定是否真的需要时间信息或者我只是遗漏了什么?

2 个答案:

答案 0 :(得分:1)

除了节省时间外,您还应该节省您节省的当日时区。这将有效地确保当您更改为其他时区时,您知道基于时间的基础。

例如:2012-11-21T15:52:01+0000

More information here

答案 1 :(得分:1)

时区转换按小时偏移工作 - 在存储的时间(至少几小时)内,您无法准确计算差异。

要考虑的一个示例 - 假设您希望按天分组数据,日期存储在UTC,但您的客户位于PST

2012-12-31 08:00:00的{​​{1}}上创建了一行,但您存储了UTC

2012-12-31

日期应反映在PST中的$date = new DateTime('2012-12-31', new DateTimeZone('UTC') ); echo $date->setTimezone( new DateTimeZone('America/Los_Angeles') )->format('Y-m-d'); //2012-12-30 $datetime = new DateTime('2012-12-31 08:00:00', new DateTimeZone('UTC') ); echo $datetime->setTimezone( new DateTimeZone('America/Los_Angeles') )->format('Y-m-d'); //2012-12-31 ,但如果没有小时偏移,则会错误地转换。

此外,正如Samuel Cook回答的那样,除非您在单个时区内明确地将2012-12-31存储在您的数据库中,否则您也应该存储时区,以便了解您的转换内容。