2010-08-12 4 views
8

PHP - DateTime :: createFromFormat - Возвращает новый объект DateTime отформатированные в соответствии с указанным форматомDateTime :: createFromFormat - PHP вопрос формат

это работает:

$var = DateTime::createFromFormat('Ymd','20100809')->getTimestamp(); 

, но это не удается с

Звонок на членскую функцию getTimestamp() на объект, не являющийся объектом

$var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00')->getTimestamp(); 

ответ

14

В данном случае неправильная часть M:S. Это должно быть i:s. См. manual on date().

Однако это подчеркивает более глубокую концептуальную проблему: неправильный ввод в любом из параметров приведет к фатальной ошибке, что является плохим поведением для приложения в производстве.

В руководстве по createFromFormat:

Возвращает новый экземпляр DateTime или FALSE в случае возникновения ошибки.

Когда вызов не может построить дату с вашего ввода, объект не возвращается.

Чтобы избежать фатальных ошибок на неправильных входах, вы (к сожалению, так как это нарушает хорошую цепочку) должны проверить на успех первым:

$var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00'); 

if ($var instanceof DateTime) 
    echo $var->getTimestamp(); 
+1

Не 'м: s'; 'Я: s'. 'm' для мотылек. – Artefacto

+0

@Artefacto, конечно, приветствия. Исправленный. –

0

Использование s вместо S и м вместо M

  • с - секунды с ведущими нулями
  • S - английский порядковый суффикс дня месяца, 2 символа, как й, й, й или й

и

  • м - Числовое представление
    месяца, с ведущими нулями
  • M - короткое текстовое представление месяца , три письма, такие как Янв через Dec
0

H: M: S М месяц короткое имя и S является порядковым (улица, й, е, е) день месяца Ьгу H: я: s

7

Это должно быть

DateTime::createFromFormat('Y/m/d H:i:s','2010/08/09 07:47:00')->getTimestamp() 
            ^^ 

См. date для используемого формата.В этом случае можно использовать strtotime. Это даст тот же результат:

strtotime('2010/08/09 07:47:00') 

Другой способ:

date_create('2010/08/09 07:47:00')->getTimestamp() 

Обратите внимание, что DateTime::createFromFormat возвращается FALSE об ошибке. Вы можете получить ошибки с DateTime::getLastErrors():

<?php 
$d = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00'); 
var_dump($d); 
var_dump(DateTime::getLastErrors()); 

даст:

 
bool(false) 
array(4) { 
    ["warning_count"]=> 
    int(0) 
    ["warnings"]=> 
    array(0) { 
    } 
    ["error_count"]=> 
    int(3) 
    ["errors"]=> 
    array(1) { 
    [14]=> 
    string(13) "Trailing data" 
    } 
}