PHPにて「Fatal error: Uncaught Exception ~~」エラーの対応方法
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のLocationにGETパラメータとして変数を入れる方法
PHPでページ遷移したい際に以下のように記述すると思う。 header("Loc ...
-
-
PHPでサイトURLからtitleとRSS用URLを取得
サイトのURLからRSS用URLとサイトタイトルを自動で取得したかった。その方法 ...
-
-
PHPで指定したディレクトリ内のファイルを全てincludeする方法
PHPでライブラリを利用する際にcomposerからインストールしたものは「ve ...
-
-
PHPMailerでエラーメッセージを日本語で出力する方法
PHPMailerのGitHubページを見ていると言語設定についての案内を見つけ ...
-
-
PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法
PHP8系で「Fatal error: Uncaught TypeError: ...