PHP DateTime比当前时间提前2小时

时间:2014-09-09 00:58:45

标签: php date datetime timezone

我尝试使用以下代码获取当前时间:

date_default_timezone_set('America/Chicago');
$curDate = new DateTime();
echo $curDate;

它回响的时间比芝加哥的时区早2个小时。为什么会这样?我的服务器也设置为芝加哥的时区。

3 个答案:

答案 0 :(得分:2)

试试这个(添加日期格式)....

date_default_timezone_set('America/Chicago');
$curDate = new DateTime();
echo date_format($curDate,'Y-m-d H:i:s');

答案 1 :(得分:1)

PHP 5.2 +

$datetime = new \DateTime("now",new \DateTimeZone('UTC'));
$datetime->modify('+2 hour');

^^误解,认为你需要调整2个小时,离开因为它很酷。

最佳做法是将日期作为UTC隐式存储为Unix Epoch整数(epoch始终为UTC)或ISO8601(包括字符串中的时区)。您的服务器时区不应干扰您的代码显示正确时间的能力。

然后当你去使用存储日期时。

$users_timezone = 'America/Chicago';
$datetime = \DateTime::createFromFormat('U',$epoch_from_server);
$timezone = new \DateTimeZone($users_timezone);
$datetime->setTimezone($timezone);
$datetime = $datetime->format('Y-m-d H:i:s');

这将允许用户在您的代码提供的用户配置文件中设置他们的时区。另一种选择是使用浏览器报告的时区,但这些时区不可靠。

答案 2 :(得分:0)

1)正确设置服务器的时区

cd /etc
rm -f localtime
ln -sf /usr/share/zoneinfo/America/Chicago localtime

2)与ntp服务器同步时间:

yum install ntp ntpdate ntp-doc
chkconfig ntpd on
ntpdate pool.ntp.org
/etc/init.d/ntpd start

3)在php.ini中设置时区

timezone = "America/Chicago"

希望有所帮助。