2015-06-10 14 views
8

Crashes trên:PHP Fatal error: Call to một định dạng hàm thành viên() trên 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 Fatal error: Call to a member function format() on boolean

Nhưng với các ngày khác hoạt động tốt:

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

định dạng sai?

+0

Cả hai không thực sự làm việc –

+0

$ date = "10.06.2015 09:25:52"; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> định dạng ('Y-m-d h: i: s'); -hoạt động – user1539207

+0

$ date = "13-06-2015 23:45:52"; echo Datetime :: createFromFormat ('d-m-Y h: i: s', $ date) -> định dạng ('Y-m-d h: i: s'); - không làm việc gì cả – user1539207

Trả lời

12

Cả dụ làm việc như bạn có nhiều lỗi:

  1. Bạn quên tham số thứ hai của bạn để Datetime::createFromFormat()
  2. h:i:s nên H:i:s
  3. ngày của bạn trong ví dụ thứ hai được ngăn cách bởi một không . một -

Sửa chữa:

<?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' nên là' H: i: s' - đã sửa lỗi của tôi, 'h' - định dạng 12 giờ. Cảm ơn – user1539207

+0

Ngoài ra, đây là 'DateTime' và không phải' Datetime' – TwystO

3

Trong trường hợp của tôi, tôi đã nhận được lỗi này vì tôi đã sử dụng microtime(true) như là đầu vào:

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

Trong những khoảnh khắc cụ thể mà microtime trả về một phao với chỉ số không như số thập phân, lỗi này xuất hiện.

Vì vậy, tôi đã phải kiểm tra xem số thập phân của nó và thêm một phần thập phân:

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

EDIT:

Do đến thời điểm chính xác nổi đôi khi sàn mang lại một sàn incorret, vì vậy tôi đã phải sử dụng một cách tiếp cận thẳng về phía trước:

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

hoặc bạn có thể kiểm tra xem đó có phải là số thập phân hay không và sử dụng 'U' – malhal

Các vấn đề liên quan