2015-06-10 28 views
8

Çöküyor tarihinde üye işlev biçimi() çağır:PHP Ölümcül hata: üzerinde boole

<?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

Ama diğer tarihleri ​​ile iyi çalışır:

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

Yanlış biçimi? Eğer birden fazla hata var olarak

+0

hiçbiri aslında –

+0

$ tarihini = "2015/10/06 09:25:52" çalışması; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> biçimi ('Y-m-d h: i: s'); -works – user1539207

+0

$ date = "13-06-2015 23:45:52"; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> biçimi ('Y-m-d h: i: s'); - Hayır zaten çalışmıyor – user1539207

cevap

12

Ne örnek çalışma: Sen Datetime::createFromFormat() için ikinci parametre unuttum

  1. h:i:s olmalıdır H:i:s
  2. İkinci örnekte tarihiniz bir . değil - ile ayrılır

Düzeltmeler:

Ben girdi olarak microtime(true) kullanıyordum çünkü Benim durumumda
<?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'' H: i: s' olmalıdır - bu sorunumu giderdim, h' - 12 saat biçimi. Teşekkürler – user1539207

+0

Ayrıca, 'DateTime' ve 'Datetime' – TwystO

3

bu hatayı başlamıştı: microtime ondalık olarak sadece sıfırlarla bir float döndüren belirli anlarda

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

, bu hata ortaya çıktı.

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

EDIT:

yüzden onun ondalık doğrulamak ve ondalık kısmı eklemek zorunda bit kayan nokta hassas bazen zemin bir Yanl kat getiriyor

Nedeniyle, bu yüzden kullanmak zorunda daha yalındır yaklaşım:

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

değil veya ondalık olup olmadığını ve 'U' kullanıp kullanmadığını kontrol edebilirsiniz – malhal

İlgili konular