我必须做计算与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日期。