Неустранимая ошибка PHP: вызов функции-члена format () на boolean
падает на:
<?php
$date = "13-06-2015 23:45:52";
echo Datetime::createFromFormat('d-m-Y h:i:s', $date)->format('Y-m-d h:i:s');
?>
PHP фатальная ошибка: вызов функции-члена format () на boolean
но с другими датами хорошо работает:
<?php
$date = "10.06.2015 09:25:52";
echo Datetime::createFromFormat('d-m-Y h:i:s', $date)->format('Y-m-d h:i:s');
?>
неверный формат?
2 ответов
ни примера у вас несколько ошибок:
- вы забыли свой второй параметр
Datetime::createFromFormat()
-
h:i:s
должно бытьH:i:s
- ваша дата во втором примере отделена
.
не-
устранение:
<?php
$date = "13-06-2015 23:45:52";
echo DateTime::createFromFormat('d-m-Y H:i:s', $date)->format('Y-m-d h:i:s');
$date = "10.06.2015 09:25:52";
echo DateTime::createFromFormat('d.m.Y H:i:s', $date)->format('Y-m-d h:i:s');
?>
в моем случае я получал эту ошибку, потому что я использовал microtime(true)
на входе:
$now = DateTime::createFromFormat('U.u', microtime(true));
в конкретные моменты, где microtime
возвращает float только с нулями в качестве десятичных знаков, эта ошибка появилась.
поэтому мне пришлось проверить, если его десятичные дроби и добавить десятичную часть:
$aux = microtime(true);
$decimais = $aux - floor($aux);
if($decimais<=10e-5) $aux += 0.1;
$now = DateTime::createFromFormat('U.u', $aux);
редактировать:
из-за точности с плавающей запятой иногда пол приносит неисправный пол, поэтому мне пришлось использовать более прямой вперед подход:
$aux = microtime(true);
$now = DateTime::createFromFormat('U.u', $aux);
if (is_bool($now)) $now = DateTime::createFromFormat('U.u', $aux += 0.001);