2012-01-05 11 views
7

Come si risolve l'errore di:Fatal error: Call to metodo non definito DateTime :: createfromformat()

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

L'errore sta accadendo alla linea 35. Questo è ciò che il mio codice legge dalla linea 31 a 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); 
    } 
} 

Come posso risolvere questo?

+0

Rimuovendo quella linea. L'errore andrà via quindi. Generalmente è una buona idea non chiamare funzioni non definite perché altrimenti causerà sempre un errore fatale. Probabilmente puoi collegare la funzione dal manuale PHP che volevi chiamare, quindi è chiaro cosa cerchi di fare? – hakre

+0

O hai commesso un errore durante la copia del messaggio errato o non è il file ad esso: 'createfromformat! = CreateFromFormat' – KingCrunch

+0

Il codice sembra funzionare correttamente sul mio server locale tramite – methuselah

risposta

20

DateTime::createFromFormat() è stato introdotto in php 5.3. E molto probabilmente ne hai uno più vecchio. Quindi, installa php> = 5.3 e avrai funzionato.

+0

Versione PHP 5.2.9 - Lo sto eseguendo su un server uk2.net – methuselah

+0

Esiste un approccio equivalente per i server che eseguono versioni precedenti di PHP (PHP <5.3)? – Sam

+0

@Sam: 'strtotime', non equivalente, ma potrebbe aiutare – zerkms

5

Quale versione di PHP stai utilizzando? Secondo PHP, createDateFormat è disponibile nelle versioni> = 5.3.0.

- modifica

Sembra che il codice stava usando DateTime in modo errato, in quanto createFromFormat restituisce un oggetto, non è una stringa, ma si dovrebbe essere in grado di recepire la DateTime :: createFromFormat() chiama con date() chiamate.

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

Mi sembra, però, che se avete a che fare con il timestamp, è possibile effettuare le ops di confronto senza dover convertire in un formato specifico. Se una delle date con cui stai trattando non è in un formato data/ora puoi fare quanto segue:

$timestamp = strtotime($yourFormattedDateTime); 

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

versione PHP 5.2.9 - Lo sto eseguendo su un server uk2.net – methuselah

+0

Non so perché eseguano una versione così vecchia, dovrai contattarli per ottenere per l'aggiornamento, utilizzare una chiamata di funzione supportata per la modifica di data/ora per 5.2.9 o trovare un nuovo host che sia più aggiornato con il proprio software. –

+1

Potete raccomandare chiamate di funzione supportate? – methuselah

Problemi correlati