2016-03-25 5 views
0

Это странно вопрос, который я столкнулся с часовым поясом и DateTime, я` краток:DateTime часового пояса, когда формат

var_dump($obj->getTime1()); 
var_dump($obj->getTime2()); 

дает мне следующее (что хорошо, часовой пояс хорошо и т.д ..) :

object(DateTime)#379 (3) { 
    ["date"]=> 
    string(19) "2016-03-28 19:00:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(12) "Europe/Paris" 
} 
object(DateTime)#378 (3) { 
    ["date"]=> 
    string(19) "2016-03-13 19:00:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(12) "Europe/Paris" 
} 

Но когда я хочу форматировать (на тех же линиях) в строку:

var_dump($obj->getTime1()->format(DateTime::ISO8601)); 
var_dump($obj->getTime2()->format(DateTime::ISO8601)); 

я получаю:

string(24) "2016-03-28T19:00:00+0200" <-- Noticed that it has a different timezone 
string(24) "2016-03-13T19:00:00+0100" 

Я ненавижу DateTime

PS: Когда я создаю 2-й объект DateTime Я клонировать первый и я добавить DateInterval:

$someTime = clone $obj->getTime1(); 
$someTime ->sub(new \DateInterval('P'.$days.'D')); 
$event->setTime2($someTime); 
+8

Пахнет как DST (летнее время) ... – Naruto

+0

также 'var_dump ($ obj-> getTime1() -> date)'. Может быть, вы хотите этого? –

+0

@Anant: Мне нужно в формате 'ISO8601' –

ответ

4

Причина вы получаете дополнительный час, потому что в последний (полный) уик-энд марша мы меняем часовой пояс и пропускаем час.

В этом году это произойдет 27 марта, а это значит, что мы фактически устанавливаем в другой часовой пояс. Объекты DateTime автоматически делают это за вас, поэтому у вас есть 2 разных часовых пояса.

Это будет отменено последние (полные) выходные октября октября 30 октября.

1

С 1999 года Европейский Союз established следующие правила для переключения с/на летнее время:

  • Start: Последнее воскресенье в марте
  • Конец: Последнее воскресенье в октябре

Это означает, что для возобновления или предварительного соглашения между странами не требуется.

Ваши примеры пересекают первую границу. Во Франции это означает переход от CET (+0100) к CEST (+0200). PHP учитывает это.

+0

Спасибо за ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^