2015-02-21 1 views
1

У меня есть строки даты-времени, как эти:Как создать объект PHP DATETIME из этой строки

2015-02-13 22:00 GMT + 1 -Dst

2015-03-20 21:00 GMT -5 + DST

То, что я начал пробовать:

<?php 
    $date = DateTime::createFromFormat('Y-m-d H:i ', '2015-03-20 21:00 GMT-5 +DST'); 
    echo $date->format('d-m-Y H:i'); 
?> 

Однако я застрял на часовой пояс и DST. Я вижу на http://php.net/manual/en/datetime.createfromformat.php, что я могу использовать e, O, P and T для часового пояса, но я не понимаю, какой символ представляет что. Могу ли я использовать его прямо так? Должен ли я преобразовать этот -5, например? -0500? Тогда какой характер? А что делать с ДСТ?

ответ

4

Эта строка даты не является общей и содержит в себе некоторую ненужную информацию (в конце). Чтобы разобрать это, я просто скажу DateTime::createFromFormat(), чтобы игнорировать элементы GMT и +DST с использованием символа +. Символ O достаточно умен, чтобы обрабатывать -5 и преобразовывать его в -0500. Если мы не игнорируем их, часовой пояс неверен в новом объекте DateTime.

<?php 
    $date = DateTime::createFromFormat('Y-m-d H:i +O +', '2015-03-20 21:00 GMT-5 +DST'); 
    echo $date->format('d-m-Y H:i'); 

Demo

+0

Спасибо, но это не похоже на часовой пояс справа: https://eval.in/291852 - Он работает так: https://eval.in/291854, но тогда мне нужно удалить dst. – Arie

+0

Я вижу, вы отредактировали его – Arie

+0

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

1

Я нашел это на http://php.net/manual/en/function.date.php. И да, я считаю, вы можете использовать его напрямую.

е - идентификатор часового пояса (добавлено в PHP 5.1.0) Примеры: UTC, GMT, Atlantic/Азорские

О - разница по Гринвичу (GMT) в часах Пример: +0200

P - разница в Гринвич времени (по Гринвичу) с двоеточием между часами и минут (добавлено в PHP 5.1.3) Пример: +02: 00

Т - Timezone аббревиатура Примеры: EST, MDT ...

+1

Спасибо, вверх проголосовали за усилия и информацию. – Arie