У меня есть следующая строка даты
$date="Sat Apr 30 2011 18:47:47 GMT+0900 (Tokyo)"
Я хочу преобразовать его в UTC
$timestamp_UNIX = strtotime($date); echo date("Ymd\TH:i:s\Z",$timestamp_UNIX);
Почему я получил
2011-04-30T11:47:47Z and not 2011-04-30T09:47:47Z
Проблема в том, что вы не автоматически эхо отзываете код UTC. Он отображает временную метку во всех настройках вашего часового пояса по умолчанию. Это делается с помощью date_default_timezone_set()
во время выполнения или с помощью настройки date.timezone
в вашем php.ini
.
Современный способ – использовать классы DateTime
и DateTimeZone
.
$d = new DateTime('Sat Apr 30 2011 18:47:47 GMT+0900 (Tokyo)'); print_r($d); $d->setTimezone(new DateTimeZone('UTC')); print_r($d);
печать
DateTime Object ( [date] => 2011-04-30 18:47:47 [timezone_type] => 1 [timezone] => +09:00 ) DateTime Object ( [date] => 2011-04-30 09:47:47 [timezone_type] => 3 [timezone] => UTC )
Вы должны использовать gmdate()
вместо date()
(или вы можете проверить классы DateTime и DateTimeZone в PHP 5.2 / 5.3)