0

我知道有几种方法可以做到这一点,其中很多都使用 DateTime 类对象。我正在使用以下方法将时间戳存储在数据库中:

date_default_timezone_set("America/Phoenix");
$time=time();
$timezone='America/Chicago';
//$time and $timezone are then stored accordingly.

然后我可以在我的时区检索时间:

date_default_timezone_set("America/Phoenix");
echo date("m/d/Y g:i:s a",$time);
//or if I want to display it to the user:
date_default_timezone_set($timezone);
echo date("m/d/Y g:i:s a",$time);

我的问题是,在显示日期和时间时,像这样操纵 PHP 的时区以实现局部性是否合适,或者我应该使用其中一个打包对象来处理这个问题?

4

1 回答 1

0

我建议使用 php 内置的DateTime对象系列来处理这个问题。您可以很容易地进行时区转换:

 // assuming the data coming from the database and it's in the America/Phoenix timezone
 $localtime = DateTime::createFromFormat('Y-m-d H:i:s', $db_date_string, new DateTimeZone('America/Phoenix'));
 $chicago_time = $localtime;
 $chicago_time->setTimeZone(new DateTimeZone('America/Chicago'));
 print $chicago_time->format('m/d/Y g:i:s a');

这使时区操作保持在最紧凑的范围内(仅限一个日期时间)。

此外,我建议仅将数据库数据存储在一个时区中,并在显示/使用之前将其转换到应用程序中。这可以在调试时为您节省大量的混乱。(它至少可以救我:-P)

于 2012-08-01T20:44:27.267 回答