2010-05-31 17 views
5

¿Alguien puede decir qué está mal con el código? error¿Qué pasa con el objeto 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'); 

es: Llamar a un formato de función miembro() en un no-objeto

Respuesta

11

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

Hace que la variable de fecha $ nula, sólo debe llamar:

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

+0

waoo awesome también resuelve mi problema. Muchas gracias –

6

Si usted no está funcionando al menos PHP 5.3.0 (como está escrito en the manual, que seguramente antes de leer preguntando, ¿no?), setTimezone devolverá NULL en lugar del DateTime modificado. ¿Estás ejecutando al menos PHP 5.3.0?

+0

que Gotto sea inferior a 5,3 debido a la eliminación de assigment resolvió el problema –

+0

Usted puede conseguir su versión tecleando 'php -V' desde la línea de comandos. – Erik

2

De acuerdo con la manual, setTimeZone devolverá o bien un objeto DateTime o una FALSE si se puede' t configurar la zona horaria Guardar el retorno es realmente innecesario porque modificará el objeto DateTime que lo pasa.

Tal vez se debería comprobar si setTimezone tuvieron éxito antes de su objeto $date a su valor de retorno:

$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

Gracias por todos los que ayudaron, pero sólo puede ser marcada respuesta correcta. código correcto es

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