2012-01-05 3 views
7

Как вы решаете ошибку:Фатальная ошибка: Вызов неопределенной метода DateTime :: createfromformat()

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

Ошибка происходит в строке 35. Это то, что мой код считывает данные из строки 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); 
    } 
} 

Как это разрешить?

+0

Удалив эту строку. Тогда ошибка исчезнет. Как правило, это хорошая идея не вызывать неопределенные функции, потому что иначе это всегда приведет к фатальной ошибке. Вероятно, вы можете связать эту функцию с руководством PHP, которое вы хотели назвать, поэтому ясно, что вы пытаетесь сделать? – hakre

+0

Либо вы допустили ошибку при копировании errormessage, либо не в файл: 'createfromformat! = CreateFromFormat' – KingCrunch

+0

Код, похоже, отлично работает на моем локальном сервере, но – methuselah

ответ

20

DateTime::createFromFormat() был введен в php 5.3. И, скорее всего, у вас старшая. Итак, установите php> = 5.3, и вы получите это сработало.

+0

PHP-версия 5.2.9 - Я запускаю его на сервере uk2.net – methuselah

+0

Существует ли эквивалентный подход для серверов, работающих на ранних версиях PHP (PHP <5.3)? – Sam

+0

@Sam: 'strtotime', не эквивалентный, но может помочь – zerkms

5

В какой версии PHP вы работаете? Согласно PHP, createDateFormat доступен в версиях> = 5.3.0.

- Редактирование

Похоже, что ваш код использует DateTime неправильно, в том, что createFromFormat возвращает объект, а не строка, но вы должны быть в состоянии транспонировать DateTime :: createFromFormat() звонки с date() звонки.

// 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']); 

Мне кажется, однако, что если вы имеете дело с временными метками, вы можете сделать сравнение оп без необходимости конвертировать в определенный формат. Если одна из дат, с которыми вы имеете дело, находится не в формате timestamp, вы можете сделать следующее:

$timestamp = strtotime($yourFormattedDateTime); 

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

PHP версия 5.2.9 - Я запускаю его на сервере uk2.net – methuselah

+0

Не знаете, почему они запускают такую ​​старую версию, вам придется связаться с ними, чтобы получить их обновить, использовать поддерживаемый вызов функции для обработки даты и времени для 5.2.9 или найти нового хоста, который более современен со своим программным обеспечением. –

+1

Вы можете рекомендовать любые поддерживаемые вызовы функций? – methuselah

Смежные вопросы