勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPにて「Fatal error: Uncaught Exception ~~」エラーの対応方法

  PHP

PHPにてDatetimeクラスの呼び出し時にタイムスタンプを指定しようとすると「Fatal error: Uncaught Exception: Failed to parse time string (xxxxxxxxx) at position 8 (8)」というエラーが発生した。以下に対応方法をメモ。

 

エラー詳細

エラーログ

Fatal error: Uncaught Exception: Failed to parse time string (xxxxxxxxx) at position 8 (8): Unexpected character in /path/to/test.php:17 Stack trace: #0 /path/to/test.php(17): DateTime->__construct(xxxxxxxxx) #1 {main} thrown in /path/to/test.php on line 17

ソースコード

//これだとエラー無し
$timestamp = '1704034800';
var_dump(date('Y-m-d H:i:s', $timestamp)); //string(19) "2024-01-01 00:00:00"

//これだとエラーが発生する
$date = new Datetime($timestamp);
var_dump($date->setTimezone(new DateTimeZone('Asia/Tokyo'))->format('Y-m-d H:i:s'));

 

対応方法

パターン1

タイムスタンプの前にアットマークをつける。

$timestamp = '1704034800';
$date = new Datetime('@' . $timestamp);
var_dump($date->setTimezone(new DateTimeZone('Asia/Tokyo'))->format('Y-m-d H:i:s'));

パターン2

setTimestampを使う。

$timestamp = '1704034800';
$date = new DateTime();
$date->setTimestamp($timestamp);
var_dump($date->setTimezone(new DateTimeZone('Asia/Tokyo'))->format('Y-m-d H:i:s'));

 

その他

アットマークをつける意味はよく分からず。ただ、公式マニュアルの「サポートする日付と時刻の書式 → ローカライズされた表記法 → Unix タイムスタンプ」の例として「"@1215282385"」のように記述されているので必要みたい。

 - PHP

  関連記事

フォームからアップロードした画像にPHPで任意のテキストを追加する方法

以前フォームから送られてきた画像に対してサイトロゴみたいなロゴ画像を追加する記事 ...

PHPで改行を含むデータをCSV化する際に表示崩れを防ぐ方法

PHPで改行を含むデータをCSV化した場合、そのCSVファイルをエクセル等で開く ...

PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法

PHP8系で「Fatal error: Uncaught TypeError: ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

PHPにて短縮URLを展開させて、元のURLを取得する方法

短縮されたURLを展開させて、元のURLを取得したいというケースがあった。方法を ...