2011-07-27 41 views
1

突然收到錯誤消息Fatal error: Call to a member function setTimezone() on a non-object添加代碼一些新行後::調用一個成員函數setTimezone()非對象上

首先,我使用的日期時間不同timeformats之間切換計算DST等

我用下面的代碼[碼塊1]

foreach ($result as $k=>$v) 
    {$timestamp=DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $k,new DateTimeZone("UTC")); //take current date from $k as new DateTile Object 
     $timestamp->setTimezone(new DateTimeZone('Europe/Berlin')); //convert timezone 
     $date[]=$timestamp->format('Y-m-d H:i:s'); // "export" the date to date-array 
     } 

此代碼的工作很好,直到現在:

我加入20行代碼上方的其他日期時間函數[碼塊2]:

$ts=new DateTime("@".round($_GET['startdate']/1000)); 
$startdate=$ts->format('Y-m-d\TH:i:s.u\Z'); 

後我添加這些2行,所有時間i得到錯誤:Fatal error: Call to a member function setTimezone()此訂單:$timestamp->setTimezone(new DateTimeZone('Europe/Berlin'));

...但我不能看到這些代碼部分之間的關​​系/連接?!

這裏發生了什麼?

謝謝你的任何想法。

//更新:你可以在註釋中看到,我使用的PHP 5.3.6 再次:代碼塊1級的作品,如果我刪除代碼塊2

+0

您運行的是哪個版本的PHP? DateTime對象是在PHP 5.2.0之後添加的 - http://us.php.net/manual/en/datetime.settimezone.php – barfoon

+0

當您執行'var_dump($ timestamp);'時會發生什麼? – barfoon

+0

'var_dump($ timestamp)'在設置時區之前。你得到了什麼? 'createFromFormat'僅在5.3中添加到PHP中。 – Treffynnon

回答

2

貌似不是所有的數組$result的密鑰是有效的日期字符串。 DateTime類在失敗時返回新的DateTime實例或FALSE。當$k無效時,$timestamp是錯誤的,這不是一個對象。

+0

好吧,有趣的想法...我會嘗試驗證...但$ k應該始終有效..我會檢查.. –

+0

不,這不是重點。錯誤在第一個元素中上升,其中$ k =「2010-12-02T02:27:51Z」,這是有效的。 –

+0

我再次檢查你的提示..和...是的:你是對的!我錯了。 $ k =「2010-12-02T02:27:51Z」無效,因爲:通過查看格式'Y-m-d \ TH:i:s.u \ Z',「.u」丟失了毫秒。正確的格式是:$ k =「2010-12-02T02:27:51.000Z」我想,這是發生了,因爲代碼塊2生成一個不同的$ k像以前一樣。 –

相關問題