0

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

4

2 回答 2

1

除了节省时间之外,您还应该保存您正在节省的那个日期的当前时区。这将有效地确保当您更改到其他时区时,您知道该以什么为基准。

前任:2012-11-21T15:52:01+0000

更多信息在这里

于 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 回答