2012-01-05 34 views
7

Làm thế nào để bạn giải quyết các lỗi của:Fatal error: Call to Phương pháp xác định DateTime :: createfromformat()

Fatal error: Call to undefined method DateTime::createfromformat() 

Các lỗi đang xảy ra tại dòng 35. Đây là những gì mã của tôi đọc từ dòng 31-45

// check database for necessary updates 

$update = mysql_query("SELECT * FROM rent WHERE colour='#3C0'"); 
while($row_update = mysql_fetch_array($update)) { 
    $datetime_lower = DateTime::createFromFormat('d/m/Y', $min); 
    $datetime_upper = DateTime::createFromFormat('d/m/Y', $max); 
    $datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', $row_update['pDate']); 
    if ($datetime_lower < $datetime_compare && $datetime_upper > $datetime_compare) { 
     // date is between do nothing 
    } else { 
     // date is not between so update 
     $update_result = mysql_query("UPDATE rent SET colour='#F0F0F0' WHERE id=" . $row_update['id'] . " && colour='#3C0'"); 
     mysql_close($update_result); 
    } 
} 

Tôi làm cách nào để giải quyết vấn đề này?

+0

Bằng cách xóa dòng đó. Lỗi sẽ biến mất sau đó. Nói chung, tốt hơn hết là không nên gọi các hàm không xác định vì nếu không nó sẽ luôn dẫn đến lỗi nghiêm trọng. Có lẽ bạn có thể liên kết các chức năng từ hướng dẫn sử dụng PHP bạn muốn gọi để nó rõ ràng những gì bạn cố gắng làm gì? – hakre

+0

Hoặc bạn đã nhầm lẫn khi sao chép lỗi, hoặc không phải là tệp của nó: 'createfromformat! = CreateFromFormat' – KingCrunch

+0

Mã có vẻ hoạt động tốt trên máy chủ cục bộ của tôi mặc dù – methuselah

Trả lời

20

DateTime::createFromFormat() được giới thiệu trong php 5.3. Và rất có thể bạn có người lớn tuổi hơn. Vì vậy, - cài đặt php> = 5.3 và bạn sẽ làm cho nó hoạt động.

+0

Phiên bản PHP 5.2.9 - Tôi đang chạy nó trên máy chủ uk2.net – methuselah

+0

Có cách tiếp cận tương đương cho các máy chủ chạy các phiên bản PHP cũ hơn (PHP <5.3) không? – Sam

+0

@Sam: 'strtotime', không tương đương, nhưng có thể giúp – zerkms

5

Bạn đang chạy phiên bản PHP nào? Theo số PHP, createDateFormat có sẵn trong các phiên bản> = 5.3.0.

- Chỉnh sửa

Hình như mã của bạn đã sử dụng DateTime không đúng cách, trong createFromFormat trả về một đối tượng, không phải là một chuỗi, nhưng bạn sẽ có thể để transpose các DateTime :: createFromFormat() gọi với date() cuộc gọi.

// PHP >= 5.3.0 
$datetime_lower = DateTime::createFromFormat('d/m/Y', $min); 
$datetime_upper = DateTime::createFromFormat('d/m/Y', $max); 
$datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', $row_update['pDate']); 

// PHP < 5.3.0 
$datetime_lower = date('d/m/Y', $min); 
$datetime_upper = date('d/m/Y', $max); 
$datetime_compare = date('d/m/Y g:i a', $row_update['pDate']); 

Dường như với tôi, nếu bạn đang xử lý dấu thời gian, bạn có thể thực hiện các phép so sánh mà không phải chuyển sang định dạng cụ thể. Nếu một trong những ngày bạn đang xử lý không có định dạng dấu thời gian, bạn có thể làm như sau:

$timestamp = strtotime($yourFormattedDateTime); 

// Now with everything in ints, you can do your conditional evals 
+0

PHP phiên bản 5.2.9 - Tôi đang chạy nó trên máy chủ uk2.net – methuselah

+0

Không chắc chắn lý do tại sao họ chạy phiên bản cũ như vậy, bạn sẽ phải liên hệ với họ để nhận họ nâng cấp, sử dụng cuộc gọi hàm được hỗ trợ cho thao tác ngày/giờ cho 5.2.9 hoặc tìm một máy chủ lưu trữ mới cập nhật phần mềm của họ. –

+1

Bạn có thể đề xuất bất kỳ cuộc gọi chức năng nào được hỗ trợ không? – methuselah

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