2015-06-10 7 views
8

awarii na:PHP Błąd krytyczny: Zadzwoń do formatu funkcji członka() na logicznych

<?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 Fatal error: Call to a member function format() on boolean

Ale z innych terminach działa dobrze:

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

niewłaściwy format?

+0

Żadne z nich nie działa –

+0

$ date = "10.06.2015 09:25:52"; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> format ("Y-m-d h: i: s"); -work – user1539207

+0

$ date = "13-06-2015 23:45:52"; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> format ("Y-m-d h: i: s"); - i tak nie działa – user1539207

Odpowiedz

12

Ani przykład praca jak masz kilka błędów:

  1. zapomniałeś drugi parametr do Datetime::createFromFormat()
  2. h:i:s powinny być H:i:s
  3. Twoja data w drugim przykładzie jest oddzielone nie .-

Poprawki:

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

2. 'h: i: s' powinno być' H: i: s' - to naprawiło mój problem, 'h' - format 12-godzinny. Dzięki – user1539207

+0

Jest to również 'DateTime', a nie' Datetime' – TwystO

3

W moim przypadku był już ten błąd, ponieważ używałem microtime(true) jako wejście:

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

w szczególnych momentach gdzie microtime Zwraca pacy z samych zer po przecinku, jak pojawił się ten błąd.

Więc musiałem sprawdzić, czy jego dziesiętnych i dodać część dziesiętną:

$aux = microtime(true); 
$decimais = $aux - floor($aux); 
if($decimais<=10e-5) $aux += 0.1; 
$now = DateTime::createFromFormat('U.u', $aux); 

EDIT:

Ze względu na zmiennoprzecinkowych precyzji czasami podłoga wniesie incorret podłogę, więc musiałem użyć bardziej bezpośrednie podejście:

$aux = microtime(true); 
$now = DateTime::createFromFormat('U.u', $aux);   
if (is_bool($now)) $now = DateTime::createFromFormat('U.u', $aux += 0.001); 
+1

lub możesz sprawdzić, czy nie jest to dziesiętne i użyć 'U' – malhal