2016-06-22 4 views
0

Я создаю PHP DateTime со строкой вроде:DateTime createfromformat лань не работает

$time = '19:14, 9 June 2016 (UTC)'; 
\DateTime($time); 

Это работает очень хорошо, а потому, что время идет от внешнего Ressource, его когда-то недопустимого как

$time = '19:14, 9 oktober 2016 (UTC)'; #oktober instead of october 

Затем DateTime заканчивается фатальной ошибкой. Чтобы предотвратить это, я хотел проверить, действительно ли timestring действительна перед использованием DateTime. Единственное решение, которое я нашел, - использовать DateTime::createFromFormat(). Мне не нравится это решение, потому что в новом DateTime() я могу использовать несколько форматов, в createFromFormat Мне нужно проверить каждый формат.

Однако вторая проблема в том, что createFromFormat даже не распознает правильный TimeString:

$time = '19:14, 9 June 2016 (UTC)'; 
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); 

возвращает ложное. Но, используя формат по дате() возвращает точно ту же строку:

echo date('H:i, d F Y (e)', time()); 
#12:14, 22 June 2016 (UTC) 
+0

Является ли ваш регион GMT + 7? –

+0

почему? script timezone is utc – Asara

+0

Без часового пояса это работает, но почему это не работает с часовым поясом - это то, что нужно исследовать ... –

ответ

0

Шарлотта Дюнуа и iainn ответил в комментарии. Это ошибка, и вам нужно удалить скобки, окружающие часовой пояс (e), точнее только закрывающий кронштейн.

$time = '19:14, 9 June 2016 (UTC)'; 
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); #does not work 
$valid = \DateTime::createFromFormat('H:i, d F Y e', $time); #works 
$valid = \DateTime::createFromFormat('H:i, d F Y (e', $time); #works 
Смежные вопросы