PHP DateTime __construct () Не удалось проанализировать строку времени (xxxxxxxx) в позиции x

У меня возникла эта ошибка построения при попытке создания нового объекта 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 ''; }