2010-05-31 23 views
5

Qualcuno può dire cosa c'è di sbagliato nel codice.Cosa c'è di sbagliato con l'oggetto DateTime

$timezone = "Asia/Karachi"; 
$date = new DateTime($when_to_send, new DateTimeZone($timezone)); 
$date = $date->setTimezone(new DateTimeZone('GMT')); 
$when_to_send = $date->format('Y-m-d H:i:s'); 

errore: Chiamata in un formato funzione membro() su un non-oggetto

risposta

11

$date = $date->setTimezone(new DateTimeZone('GMT'));

Rende il $ date nulla variabile, si deve solo chiamare:

$date->setTimezone(new DateTimeZone('GMT'));

+0

waoo fantastico anche risolvere il mio problema. Grazie mille molto –

6

Se non si sta eseguendo almeno PHP 5.3.0 (come scritto in the manual, che sicuramente letto prima chiedendo, vero?), setTimezone restituirà NULL invece del DateTime modificato. Stai eseguendo almeno PHP 5.3.0?

+0

si gotto essere inferiore a 5,3 perché la rimozione assigment risolto il problema –

+0

È possibile ottenere la versione digitando 'php -V' dalla riga di comando. – Erik

2

Secondo il manual, setTimeZone sarà restituire un oggetto DateTime o un FALSE se puo' t imposta il fuso orario. Salvare il reso in realtà non è necessario perché modificherà l'oggetto DateTime che lo passi.

Forse si dovrebbe verificare se setTimezone riuscito prima di impostare l'oggetto $date al suo valore di ritorno:

$timezone = "Asia/Karachi"; 
$date = new DateTime($when_to_send, new DateTimeZone($timezone)); 

if (! ($date && $date->setTimezone(new DateTimeZone('GMT')))) { 
    # unable to adjust from local timezone to GMT! 
    # (display a warning) 
} 

$when_to_send = $date->format('Y-m-d H:i:s'); 
1

Grazie per tutti coloro che hanno contribuito, ma solo può essere contrassegnata risposta corretta. codice corretto è

$timezone = "Asia/Karachi"; 
$date = new DateTime($when_to_send, new DateTimeZone($timezone)); 
$date->setTimezone(new DateTimeZone('GMT')); 
$when_to_send = $date->format('Y-m-d H:i:s'); 
Problemi correlati