2012-01-05 22 views
7

Jak można rozwiązać ten błąd:Fatal error: Call to metoda niezdefiniowany DateTime :: createfromformat()

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

Błąd dzieje się na linii 35. To właśnie mój kod odczytuje z linii 31 do 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); 
    } 
} 

Jak mogę rozwiązać ten problem?

+0

Po usunięciu tej linii. Błąd zniknie wtedy. Generalnie dobrze jest nie wywoływać niezdefiniowanych funkcji, ponieważ w przeciwnym razie zawsze będzie to przyczyną błędu krytycznego. Prawdopodobnie możesz połączyć funkcję z podręcznika PHP, który chcesz wywołać, aby było jasne, co próbujesz zrobić? – hakre

+0

Albo popełniłeś błąd podczas kopiowania errormessage, albo nie jest to plik do niego: 'createfromformat! = CreateFromFormat' – KingCrunch

+0

Kod wydaje się działać dobrze na moim lokalnym serwerze, chociaż – methuselah

Odpowiedz

20

DateTime::createFromFormat() został wprowadzony w php 5.3. I najprawdopodobniej masz starszą. Więc - zainstaluj php> = 5.3, a otrzymasz to działa.

+0

PHP wersja 5.2.9 - Używam go na serwerze uk2.net – methuselah

+0

Czy istnieje podejście równoważne dla serwerów z wcześniejszymi wersjami PHP (PHP <5.3)? – Sam

+0

@Sam: 'strtotime', nie jest równoważny, ale może pomóc – zerkms

5

Którą wersję PHP już masz? Zgodnie z PHP, createDateFormat jest dostępny w wersjach> = 5.3.0.

- Edycja

wygląda Twój kod został przy użyciu DateTime niepoprawnie, że createFromFormat zwraca obiekt, a nie ciąg, ale powinieneś być w stanie dokonać transpozycji DateTime :: createFromFormat() wywołuje z date() połączenia.

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

Wydaje mi się jednak, że jeśli mamy do czynienia ze znaczników czasu, można zrobić porównanie OPS bez konieczności konwersji do określonego formatu. Jeśli jedna z dat, z którymi masz do czynienia, nie jest w formacie sygnatury czasowej, możesz wykonać następujące czynności:

$timestamp = strtotime($yourFormattedDateTime); 

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

PHP wersja 5.2.9 - Używam go na serwerze uk2.net – methuselah

+0

Nie wiem, dlaczego używają tak starej wersji, będziesz musiał się z nimi skontaktować, aby uzyskać je uaktualnić, użyj obsługiwanego wywołania funkcji do manipulowania datą/czasem w wersji 5.2.9 lub znajdź nowego hosta, który jest bardziej aktualny w swoim oprogramowaniu. –

+1

Czy możesz polecić jakieś obsługiwane funkcje połączeń? – methuselah

Powiązane problemy