我尝试将时区从UTC转换为ET。当我将UTC(1:20 pm)转换为ET时,它在我的本地主机(windows)中工作得很好但在生产(Linux服务器)中.File_date显示为9.20上午。有什么想法,为什么它显示错误的时间?
$original_datetime = date('Y-m-d H:i:s');
$original_timezone = new DateTimeZone('UTC');
$datetime = new DateTime($original_datetime, $original_timezone);
$target_timezone = new DateTimeZone('America/New_York');
$datetime->setTimeZone($target_timezone);
$file_date = $datetime->format("m-d-Y g:i A");
答案 0 :(得分:1)
这不是错误的时间。
东部时间和UTC目前相隔四小时。 UTC时间下午1:20是美国东部时间(东部时间)上午9:20。因此,您在生产中获得的结果是正确的。
在本地主机上逐步执行此代码,并检查您使用的每个变量。查看哪一个设置不正确。然后你会知道问题所在。
我怀疑问题是第一行应该调用gmdate()
而不是date()
。 gmdate()
为您提供GMT中的当前时间,但date()
会在您当地时间将其提供给您。如果您的生产服务器默认设置为GMT / UTC,则可能会有所不同。
但是,我想重申,你的本地结果是不正确的 - 而不是你的生产结果。上午9:20是从UTC到美国/纽约的1:20 PM正确转换。