Подтвердить что ты не робот

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 с меткой времени, переданной как жестко закодированное значение, и не сообщал об ошибках.

Кажется, это было одно, но мне нужно объяснение, если оно есть, поскольку я не могу позволить себе, чтобы это произошло снова.

4b9b3361

Ответ 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 '';
    }