以后使用 PHP 的DateTime将存储的日期转换为不同的时区时,是否需要存储时间信息(例如,2012-12-31 00:00:00 而不仅仅是 2012-12-31)?看来,如果我只存储日期,时区转换是不准确的,所以我不确定是否真的需要时间信息,或者我只是错过了什么?
问问题
65 次
2 回答
1
于 2012-11-21T19:01:24.640 回答
1
时区转换按小时偏移量工作 - 如果没有存储时间(至少几个小时),您将无法准确计算差异。
一个要考虑的例子 - 假设您想按天对数据进行分组,日期存储在UTC
但您的客户在PST
.
2012-12-31 08:00:00
在 中创建了一行UTC
,但您存储了2012-12-31
。
$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
日期应该反映2012-12-31
在 PST 中,但如果没有小时偏移量,它将被错误地转换。
此外,正如塞缪尔库克所回答的那样,除非您明确地将时区存储datetime
在数据库中的单个时区下,否则您也应该存储时区,这样您就知道您的转换来源。
于 2012-11-21T19:24:00.460 回答