DateTime对象有什么问题

时间:2010-05-31 12:43:32

标签: php datetime date

任何人都可以告诉代码有什么问题。

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

错误是:在非对象上调用成员函数format()

4 个答案:

答案 0 :(得分:11)

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

使$ date变量为null,你应该调用它:

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

答案 1 :(得分:6)

如果你没有运行至少PHP 5.3.0(如the manual所述,你在询问之前确定已经读过,对吗?),setTimezone将返回NULL而不是修改后的DateTime。你运行的是至少PHP 5.3.0吗?

答案 2 :(得分:2)

根据manualsetTimeZone如果无法设置时区,则会返回DateTime个对象或FALSE。保存返回实际上是不必要的,因为它将修改您传递的DateTime对象。

在将setTimezone对象设置为返回值之前,您可能应该检查$date是否成功:

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

答案 3 :(得分:1)

感谢所有帮助过的人,但只能标记正确答案。正确的代码是

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