strtotime日期奇怪的结果

时间:2011-09-02 09:31:16

标签: php date

给定以下字符串日期:Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)

如果我在上面做了一个strtotime,然后将它转换回字符串日期,它似乎获得了一个小时。

echo $str_date,"  Vs ",date("c",strtotime($str_date));

产地:

Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)2011-09-02T22:00:00+01:00

我意识到这与夏令时有关,但是如何弥补这一点?

4 个答案:

答案 0 :(得分:3)

我认为你误解了,
在这种情况下没有白天节省光,
但是 GMT ,你因此获得了一个小时

在我的时区(GMT + 8)

php -r "echo date('r', strtotime('Fri Sep 02 2011 21:00:00 GMT+0100'));"
Sat, 03 Sep 2011 04:00:00 +0800

由于GMT+8 - GMT+1 = 7

,我获得了7个小时

答案 1 :(得分:1)

您使用的是哪个PHP版本?您的date.timezone设置是什么?我问,因为我无法在Mac OS X上重现运行PHP 5.3.6的输出:

$str_date   = 'Fri Sep 02 2011 21:00:00 GMT+0100  (GMT Daylight Time)';
echo $str_date,"  Vs ",date("c",strtotime($str_date));
// Fri Sep 02 2011 21:00:00 GMT+0100  (GMT Daylight Time)  Vs 1970-01-01T01:00:00+01:00

这是正确的,因为Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)不是有效的日期/时间字符串。

$str_date   = 'Fri Sep 02 2011 21:00:00 GMT+0100';
echo $str_date,"  Vs ",date("c",strtotime($str_date));
// Fri Sep 02 2011 21:00:00 GMT+0100  Vs 2011-09-02T22:00:00+02:00

这是正确的,因为我在GMT + 2。

答案 2 :(得分:1)

  

我意识到这与夏令时有关,但是如何弥补这一点?

不使用date()strtotime(); <{1}}类是首选。

DateTime

或以程序风格

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100';
$datetime = new DateTime($str_date);
echo $datetime->format('c'); // 2011-09-02T21:00:00+01:00

除此之外:如果您仍希望使用$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; echo date_format(date_create($str_date), 'c'); // 2011-09-02T21:00:00+01:00 / date(),那么,正如其他答案和您自己的观察结果所示,您需要注意日期字符串中使用的时区和你的剧本。

答案 3 :(得分:0)

似乎strtotime()将您的时间呈现为SOAP格式:YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection?

结果是:

"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"

您可以尝试将时间字符串格式化为其他时间格式。查看http://www.php.net/manual/en/datetime.formats.compound.php