当使用PHP的DateTime将存储的日期转换为不同的时区时,您是否需要存储时间信息(例如,2012-12-31 00:00:00而不仅仅是2012-12-31)?看来如果我只是存储日期,时区转换是不准确的,所以我不确定是否真的需要时间信息或者我只是遗漏了什么?
答案 0 :(得分:1)
除了节省时间外,您还应该节省您节省的当日时区。这将有效地确保当您更改为其他时区时,您知道基于时间的基础。
例如:2012-11-21T15:52:01+0000
答案 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
存储在您的数据库中,否则您也应该存储时区,以便了解您的转换内容。