2015-05-12 13 views
7

Khi tôi chạy cái này, cái đầu tiên được tạo chính xác vào một ngày. Cái thứ hai không thành công, trả lại một boolean và vì vậy tôi không thể định dạng được. Là thời gian ra khỏi phạm vi?Tại sao DateTime :: createFromFormat() không thành công và trả về một boolean trong ví dụ thứ hai của tôi?

//works correctly 
$startDate = "2015-05-06 10:49:20.637133"; 
$start = DateTime::createFromFormat('Y-m-d h:m:s.u',$startDate); 
echo $start->format('m/d/y'); 

//doesn't work correctly 
$startDate = "2015-05-12 15:49:06.821289"; 
$start = DateTime::createFromFormat('Y-m-d h:m:s.u',$startDate); 
echo $start->format('m/d/y'); 

Code to reproduce the error

+0

vấn đề Tương tự như: https: //stackoverflow.com/questions/21257536/php-datetime-parsing-string-date-fails nhưng tôi không tin rằng vấn đề là giống nhau – depperm

Trả lời

10

Thay đổi h đến một lớn H, kể từ khi một nhỏ là định dạng 12-giờ và một trong những lớn là định dạng 24-giờ.

Bạn có thể xem tất cả các định dạng trong manual. Và báo giá từ đó:

h 12 giờ định dạng của một giờ với số không hàng đầu 01 đến 12
H định dạng 24 giờ của một giờ với số không hàng đầu từ 00 đến 23

Có nghĩa là mã của bạn hiện không thành công vì không có 15 trong định dạng 12 giờ.

+1

không bao giờ nhớ thực tế bạn có Ymd h: m: s ... hai m ... thứ hai sẽ là tôi trong vài phút. – jsnfwlr

10

Kiểm tra DateTime::getLastErrors():

php > var_dump(DateTime::createFromFormat('Y-m-d h:m:s',"2015-05-12 15:49:06")); 
bool(false) 

php > var_dump(DateTime::getLastErrors()); 
array(4) { 
    ["warning_count"]=> 
    int(1) 
    ["warnings"]=> 
    array(1) { 
    [19]=> 
    string(27) "The parsed date was invalid" 
    } 
    ["error_count"]=> 
    int(1) 
    ["errors"]=> 
    array(1) { 
    [11]=> 
    string(30) "Hour can not be higher than 12" 
+0

wow, không biết rằng các thông báo lỗi từ DateTime nơi mà đơn giản! (Tôi nghĩ rằng 'Giờ không thể cao hơn 12' là một gợi ý khá tốt :) – Rizier123

2

Bên cạnh những câu trả lời khác, đối với các định dạng chuẩn hiểu bởi DateTime bạn không cần phải tạo ra từ một định dạng:

$startDate = "2015-05-12 15:49:06.821289"; 
$start = new DateTime($startDate); 
echo $start->format('m/d/y'); 
Các vấn đề liên quan