PHP - DateTime :: createFromFormat - возвращает новый объект DateTime, отформатированный в соответствии с указанным форматом
, это работает:
$var = DateTime::createFromFormat('Ymd','20100809')->getTimestamp();
, но это не с
. Вызов функции-члена getTimestamp () для необъекта
$var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00')->getTimestamp();
Н: М: S M - краткое название месяца, а S - порядковый (st, nd, rd, th) день месяца. попробуйте H: i: s
Это должно быть
DateTime::createFromFormat('Y/m/d H:i:s','2010/08/09 07:47:00')->getTimestamp()
^ ^
См. дата
, чтобы узнать об используемом формате.
В этом случае вы также можете использовать 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" } }
В данном случае часть M: S
неверна. Это должно быть i: s
. См. Руководство по 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();
Используйте s вместо S и m вместо M
и