2010-05-31 5 views
5

Quelqu'un peut-il dire ce qui ne va pas avec le code?Ce qui ne va pas avec l'objet 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'); 

erreur: Appel à un format de fonction membre() sur un non-objet

Répondre

11

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

Makes la valeur nulle variable $ date, vous devez simplement appeler:

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

+0

waoo génial cela résout aussi mon problème. Merci beaucoup –

6

Si vous n'êtes pas en cours d'exécution au moins PHP 5.3.0 (comme écrit dans the manual, qui vous avez sûrement lu avant demande, droite?), setTimezone retournera NULL au lieu du DateTime modifié. Courez-vous au moins PHP 5.3.0?

+0

il gotto être inférieur à 5.3, car la suppression assigment a résolu le problème –

+0

Vous pouvez obtenir votre version en tapant 'php -v' de la ligne de commande. – Erik

2

Selon le manual, setTimeZone renvoie l'état d'un objet DateTime ou FALSE si elle peut » t définir le fuseau horaire. L'enregistrement du retour est en fait inutile car il va modifier l'objet DateTime que vous lui transmettez.

Peut-être que vous devriez vérifier si setTimezone réussi avant de votre objet $date à sa valeur de retour:

$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

Merci pour tous ceux qui ont, mais ne peut être marqué réponse correcte. code correct est

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