Etc / GMT + (смещение), обеспечивающий только GMT в PHP - PullRequest
1 голос
/ 21 июня 2011

Согласно PHP, часовой пояс в формате Etc/GMT+(offset) является действительным часовым поясом .Исходя из этого, я бы предположил, что этот код выведет серию различных временных часов:

$start_date = 'Dec 16, 2011';
$start_time = '09:45:00';
#$utime_zone = 'GMT'; <-- switching to GMT works!
$utime_zone = 'Etc/GMT';

for($i = -12; $i <= 12; $i++){
   $curr = ($i >= 0)?'+'.$i: $i;
   $str = ($start_date . " " . $start_time . " " . $utime_zone.$curr);
   echo $str . ' = ' . strtotime($str).PHP_EOL;
}

К сожалению, все вызовы strtotime полностью игнорируют часовой пояс.Dec 16, 2011 09:45:00 Etc/GMT-12 = 1324028700Dec 16, 2011 09:45:00 Etc/GMT-11 = 1324028700Dec 16, 2011 09:45:00 Etc/GMT-10 = 1324028700...you get the idea.

Очевидно, я сделал некоторые предположения по этому поводу, но есть ли простой способ конвертировать из Etc/GMT+(offset) в метку времени по Гринвичу?

1 Ответ

2 голосов
/ 21 июня 2011

Я не знаю, почему ваш случай не работает (кроме большого предупреждения PHP, в котором говорится, что не следует использовать этот метод), но вы можете легко обойти его, используя ISO-8601 форматирование даты

Формат в основном Y-m-d\TH:i:s, а затем либо Z для UTC, либо +/-hh:mm.

$datetime = '2011-06-20T18:49:00';
echo $datetime.'+01:00 => '.strtotime($datetime.'+01:00')."<br />";
echo $datetime.'+03:00 => '.strtotime($datetime.'+03:00')."<br />";

дает вам

2011-06-20T18:49:00+01:00 => 1308592140
2011-06-20T18:49:00+03:00 => 1308584940
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...