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
Я бы понял эту ошибку для передачи недопустимых форматов, но это настоящая временная метка.
Причина в том, что это очень странно: я с тех пор запускал script для создания нового объекта DateTime с меткой времени, переданной как жестко закодированное значение, и не сообщал об ошибках.
Кажется, это было одно, но мне нужно объяснение, если оно есть, поскольку я не могу позволить себе, чтобы это произошло снова.
Ответы
Ответ 1
Вместо этого вы должны использовать setTimestamp, если вы его жестко задали:
$start_date = new DateTime();
$start_date->setTimestamp(1372622987);
в вашем случае
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Ответ 2
Используйте метод createFromFormat
:
$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);
UPDATE
Теперь я рекомендую использовать Carbon
Ответ 3
измените свой код на
$start_date = new DateTime( "@" . $dbResult->db_timestamp );
и он будет работать нормально
Ответ 4
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Ответ 5
Это сработало для меня.
/**
* 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("d-m-Y");
}
return '';
}