在时区之间转换



我知道有几种方法可以做到这一点,其中很多方法都使用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)

相关内容

  • 没有找到相关文章

最新更新