У меня возникла эта ошибка построения при попытке создания нового объекта DateTime с использованием метки времени:
Исключение: DateTime :: _ construct (): Не удалось проанализировать строку времени (1372622987) в позиции 8 (8): Неожиданный символ в DateTime-> _construct ()
Код создания объекта:
$start_date = new DateTime( "@{$dbResult->db_timestamp}" );
Где $ dbResult-> db_timestamp – допустимая временная метка unix, взятая из базы данных. Соответствующая метка времени:
1372622987
Я бы понял эту ошибку для передачи недопустимых форматов, но это настоящая временная метка.
Причина в том, что это очень странно: я с тех пор запускал скрипт для создания нового объекта DateTime с меткой времени, переданной как жестко закодированное значение, и не сообщал об ошибках.
Кажется, это было одно, но мне нужно объяснение, если оно есть, поскольку я не могу позволить себе, чтобы это произошло снова.
Вместо этого вы должны использовать setTimestamp, если вы его жестко кодируете:
$start_date = new DateTime(); $start_date->setTimestamp(1372622987);
в твоем случае
$start_date = new DateTime(); $start_date->setTimestamp($dbResult->db_timestamp);
измените свой код на этот
$start_date = new DateTime( "@" . $dbResult->db_timestamp );
и он будет работать нормально
Используйте метод createFromFormat
:
$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);
ОБНОВИТЬ
Теперь я рекомендую использовать углерод
$start_date = new DateTime(); $start_date->setTimestamp($dbResult->db_timestamp);
Это сработало для меня.
/** * return date in specific format, given a timestamp. * * @param timestamp $datetime * @return string */ public static function showDateString($timestamp) { if ($timestamp !== NULL) { $date = new DateTime(); $date->setTimestamp(intval($timestamp)); return $date->format("dmY"); } return ''; }
-/** * return date in specific format, given a timestamp. * * @param timestamp $datetime * @return string */ public static function showDateString($timestamp) { if ($timestamp !== NULL) { $date = new DateTime(); $date->setTimestamp(intval($timestamp)); return $date->format("dmY"); } return ''; }