Учитывая следующую строчную дату: Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)
в php, если я делаю 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
Я понимаю, что это связано с летней экономией, но как это компенсируется?
Я понимаю, что это связано с летней экономией, но как это компенсируется?
Не используя date()
и strtotime()
; класс 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()
/ strtotime()
то, как показывают другие ответы и ваши собственные наблюдения, вам нужно быть осторожными с часовыми поясами, используемыми в строке даты и вашем скрипте.
Я думаю, вы недоразумение,
в этом случае нет дневной экономии света,
НО 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
который я получаю 7 часов, из-за GMT+8 - GMT+1 = 7
Какую версию PHP вы используете? Какова ваша настройка date.timezone
? Я спрашиваю, потому что я не могу воспроизвести ваш вывод с PHP 5.3.6 в Mac OS X:
$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.
Кажется, что 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