2010-05-31 19 views
5

Czy ktoś może powiedzieć, co jest nie tak z kodem.Co jest nie tak z obiektem 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'); 

błędu: Zadzwoń do formatu funkcji członka() na brak przedmiotu

Odpowiedz

11

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

Sprawia, że ​​$ datę zmiennej null, należy po prostu nazwać:

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

+0

waoo niesamowite to również rozwiązać mój problem. Dziękuję bardzo, bardzo –

6

Jeśli nie działa co najmniej PHP 5.3.0 (jak napisano w the manual, który na pewno przeczytać przed pytając, prawda?), setTimezone zwróci wartość NULL zamiast zmodyfikowanego DateTime. Czy używasz przynajmniej PHP 5.3.0?

+0

to Gotto być mniejsza niż 5.3, ponieważ usunięcie assigment rozwiązać problem –

+0

można otrzymać wersję wpisując 'php -V' z wiersza poleceń. – Erik

2

Według manual, setTimeZone powróci albo DateTime obiektu lub FALSE jeśli można” t Ustaw strefę czasową. Zapisanie zwrotu jest właściwie niepotrzebne, ponieważ zmodyfikuje obiekt, który go przepiszesz.

Może należy sprawdzić, czy udało setTimezone przed ustawieniem swój obiekt $date jego wartości zwracanej:

$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

Dzięki dla wszystkich, którzy pomogli, ale tylko może być oznaczone prawidłową odpowiedź. Poprawny kod jest

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