2010-05-31 8 views
5

Kann jemand sagen, was mit dem Code falsch ist.Was ist falsch mit DateTime-Objekt

$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'); 

Fehler: Rufen Sie an ein Mitglied Funktion Format() auf einem Nicht-Objekt

Antwort

11

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

macht den $ date Variable null, sollten Sie es einfach anrufen:

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

+0

waoo genial es auch mein Problem zu lösen. Vielen Dank –

6

Wenn Sie nicht mindestens PHP 5.3.0 (wie geschrieben in the manual ausgeführt wird, die Sie sicherlich schon gelesen fragt, richtig?), setTimezone wird NULL anstelle der geänderten DateTime zurückgeben. Laufen Sie mindestens PHP 5.3.0?

+0

es gotto weniger als 5,3, da das Entfernen assigment das Problem gelöst –

+0

Sie Ihre Version durch Eingabe von 'php -V' von der Kommandozeile zu bekommen. – Erik

2

Nach dem manual Rückkehr setTimeZone wird entweder ein DateTime Objekt oder eine FALSE wenn es kann‘ t Stellen Sie die Zeitzone ein. Das Speichern der Rückgabe ist eigentlich nicht notwendig, da es das DateTime Objekt ändert, das Sie übergeben.

Vielleicht sollten Sie prüfen, ob setTimezone gelang es, bevor Ihr $date Objekt seiner Rückgabewert Einstellung:

$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

Vielen Dank für alle, die aber nur geholfen, kann richtige Antwort markiert werden. Korrekter Code ist

$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');