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にて三項演算子をより簡単に書けるNull合体演算子について
PHPにて〇〇という変数もしくは配列に値があれば××という変数にその値を格納、無 ...
-
-
PHP5.4系でAPCが上手く動かなかったので5.5にアップデート&Zend OPcache導入
PHP5.3系から5.4系にアップデートしてから、WordPressがちょっと重 ...
-
-
PHPで引数の先頭に&(アンパサンド)をつける参照渡し(リファレンス渡し)について
他社が作成されたPHPのソースコードを拝見していると関数の引数の頭に&( ...
-
-
PHPで指定したディレクトリ内のファイルを全てincludeする方法
PHPでライブラリを利用する際にcomposerからインストールしたものは「ve ...
-
-
PHPでHTMLメールを送信する方法(PHPMailerあり無しの2パターン)
PHPでHTMLメールを送信したい。また、メール関連の機能を実装する際は環境によ ...