PHP DateTime __construct() Gagal mengurai waktu string (xxxxxxxx) pada posisi x

Saya memiliki konstruksi ini kesalahan ketika mencoba untuk membuat yang baru DateTime objek menggunakan timestamp:

Pengecualian: DateTime::construct(): Failed to parse waktu string (1372622987) di posisi 8 (8): karakter tak Terduga di DateTime->construct()

Objek penciptaan kode ini:

$start_date = new DateTime( "@{$dbResult->db_timestamp}" );

Di mana $dbResult->db_timestamp adalah valid unix timestamp diambil dari database. Timestamp tersebut adalah:

1372622987

Saya akan memahami kesalahan ini untuk invalid format yang berlalu, tapi ini adalah asli timestamp.

Alasan ini sangat aneh: aku karena berlari script untuk membuat new DateTime objek dengan timestamp lulus sebagai nilai kode keras, dan dilaporkan tidak ada kesalahan.

Hal ini tampaknya telah menjadi salah satu off, tapi aku butuh penjelasan jika ada satu, seperti yang saya dapat't membiarkan ini terjadi lagi.

Mengomentari pertanyaan (5)
Larutan

Anda harus menggunakan setTimestamp sebaliknya, jika anda hardcode ini:

$start_date = new DateTime();
$start_date->setTimestamp(1372622987);

dalam kasus anda

$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Komentar (4)

Gunakan createFromFormat metode:

$start_date = DateTime::createFromFormat(“U“, $dbResult->db_timestamp);

UPDATE

Saya saat ini merekomendasikan penggunaan Karbon

Komentar (3)

mengubah kode ini

$start_date = new DateTime( "@" . $dbResult->db_timestamp );

dan itu akan bekerja dengan baik

Komentar (5)
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Komentar (0)

Ini bekerja untuk saya.

   /**
     * 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 '';
    }
Komentar (0)