Php,正常日期是正确的,但gmdate是不准确的


php, normal date is correct, but gmdate is not accurate

我必须做计算与GMT日期,但它看起来像有一个错误,或者我不明白的东西。

echo date('Y-m-d H:i:s').'<br>';
$time = strtotime(date('Y-m-d H:i:s'));
// calculations will come
$time = date('Y-m-d H:i:s', $time);
echo $time.'<br>';

打印相同的日期,正如预期的那样。但这:

echo gmdate('Y-m-d H:i:s').'<br>';
$time = strtotime(gmdate('Y-m-d H:i:s'));
// calculations will come
$time = gmdate('Y-m-d H:i:s', $time);
echo $time.'<br>';

则不一样。我做错了什么?我必须使用格林尼治时间,这是一个国际网站。

strtotime使用本地时区,除非传递的字符串包含时区信息。格式为'Y-m-d H:i:s'的日期不包含时区信息。

strtotime(gmdate('Y-m-d H:i:s'))中,函数strtotime假定传递的字符串指定了本地时区的日期,但它实际上是GMT。

我没有这方面的经验,不过我会试一试。

结果如下:

2014-07-22 10:21:11
2014-07-22 10:21:11
2014-07-22 08:21:11
2014-07-22 06:21:11

查看php.ini中的时区

我在我的php.ini:

date.timezone = Europe/Paris

什么是GMT+2

gmdate试图计算GMT日期,所以对我来说(而不是我的时区GMT+2),它减去2小时。然后,当从strtotime结果再次使用gmdate时,它只是做同样的事情。因为我设置了GMT+2,它又减去了2个小时,因为它想计算GMT日期。