datetime — фатальная ошибка PHP: вызов функции-члена format () для логического значения

Вылетает на:

<?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 () для логического значения

Но с другими датами хорошо работает:

<?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');
?>

Неправильный формат?

13

Решение

Ни один из примеров не работает, так как у вас есть несколько ошибок:

  1. Вы забыли свой второй параметр Datetime::createFromFormat()
  2. h:i:s должно быть H:i:s
  3. Ваша дата во втором примере отделена . не -

Исправления:

<?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');
?>
18

Другие решения

В моем случае я получал эту ошибку, потому что я использовал microtime(true) как вход:

$now = DateTime::createFromFormat('U.u', microtime(true));

В определенные моменты, когда microtime возвращает ошибку с плавающей точкой только с нулями в виде десятичных дробей.

Таким образом, я должен был проверить, являются ли его десятичные дроби и добавить десятичную часть:

$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);
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector