我知道有几种方法可以做到这一点,其中很多方法都使用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的时区以实现局部感是否合适,或者我应该使用一个打包的对象来处理这个问题?
我建议使用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)