снова: вызов функции-члена setTimezone () для необъекта - PullRequest
1 голос
/ 27 июля 2011

Я неожиданно получаю сообщение об ошибке Fatal error: Call to a member function setTimezone() on a non-object после добавления некоторых новых строк кода:

Прежде всего, я использовал DateTime для переключения между различными форматами времени для расчета летнего времени и т. Д.

Я использовал следующий код [Кодовый блок 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 строк кода над другой функцией DateTime [Блок кода 2]:

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

После того, как я добавил эти 2 строки, все время я получаю сообщение об ошибке: Fatal error: Call to a member function setTimezone() для этой строки: $timestamp->setTimezone(new DateTimeZone('Europe/Berlin'));

... но я не вижу связи между этими частями кода?!

Что здесь произошло?

Спасибо за любую идею.

// Обновление: как вы можете видеть в комментариях, я использую PHP 5.3.6 еще раз: блок кода 1 работает, если я удалю блок кода 2

1 Ответ

2 голосов
/ 27 июля 2011

Похоже, что не все ключи массива $result являются допустимыми строками даты. Класс DateTime возвращает новый экземпляр DateTime или FALSE при ошибке. И когда $k недопустимо, $timestamp ложно, что не является объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...