给定以下字符串日期: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)
对2011-09-02T22:00:00+01:00
我意识到这与夏令时有关,但是如何弥补这一点?
答案 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
答案 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