2012-05-01 3 views
2

У меня проблема с преобразованием строки времени, которую я получаю из JSON в другой формат. Так или иначе, дата установлена ​​на минус 24 часа. Вот объект с JSONПреобразование времени из строки JSON с PHP

[date] => 2011-07-02T00:00:00+02:00 

Я использую strtotime() и date()

date('l, d F Y', strtotime($day->date)); 

Но результат выглядит следующим образом

FRIDAY, 01 JULY 2011 

Очевидно, что дата в формате JSON является второй июля. Кто-нибудь знает, почему это происходит? Я пропустил что-то важное? Пойду поможем!

+0

Какова ваша версия PHP? –

ответ

4

Я думаю, вы должны использовать DateTime. Это не зависит от хостов TimeZone. Рядом с форматом действует ISO8601. Поэтому DateTime не будет проблемой.

$dt = new DateTime("2011-07-02T00:00:00+02:00"); 
echo $dt->format("l, d F Y"); 

// Echos Saturday, 02 July 2011 

http://ideone.com/yPp4d

+0

Спасибо! Я исправил его, вызвав «date_default_timezone_set» –

+0

@JuliaDemchenko. Плохая практика изменить часовой пояс по умолчанию, который влияет на все приложение. –

+0

Я понимаю. В моем случае время привязано к событию, которое происходит в определенном часовом поясе, поэтому нет необходимости показывать время в зависимости от часового пояса пользователя. –

-1

PHP не понимает бесконечное множество времени/даты строк. То, что «очевидно» для человека, не так очевидно для компьютера. Без конкретного анализатора для этого точного формата даты, как компьютерный язык понимает, что такое T в вашем примере?

PHP strtotime formats покажет вам, в каких форматах PHP может преобразовать строку из, в объект времени или даты.

Даже если дата и время правильно разобраны, ваш tzcorrection +0200 говорит PHP, чтобы исправить разницу в часовом поясе GMT ​​+ 2 часа, что, скорее всего, не соответствует вашему правильному смещению часового пояса и, таким образом, дает вам ошибку.

+0

-1 Это хорошо известный формат [ISO8601] (http://en.wikipedia.org/wiki/ISO_8601), который '' styletime' определенно понимает. – phihag