странная дата странный результат - PullRequest
5 голосов
/ 02 сентября 2011

Учитывая следующую строковую дату: 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

Я понимаю, что это связано с переходом на летнее время, но как можно это компенсировать?

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Я думаю, что вы недоразумение,
в этом случае нет сохранения дневного света,
НО 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

1 голос
/ 02 сентября 2011

Я понимаю, что это связано с переходом на летнее время, но как можно это компенсировать?

Не используя 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(), тогда, как показывают другие ответы и ваши собственные наблюдения, вам нужно быть осторожным с часовыми поясами, которые используются в строке даты и в вашем сценарии.

1 голос
/ 02 сентября 2011

Какую версию 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.

0 голосов
/ 02 сентября 2011

Похоже, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...