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"」のように記述されているので必要みたい。
関連記事
-
-
PHPMailerを使ってメールをSMTP送信する方法(Composer無し)
PHPでメールをSMTP送信したかった。また、レンタルサーバだったのでCompo ...
-
-
PHPにて同一サーバの別ディレクトリでセッションを振り分ける方法
同じサーバ内にmemberとownerの別ディレクトリがあり、それぞれにsess ...
-
-
phpdotenvライブラリを使用してPHPで.envファイルを読み込ませる方法
CodeIgniterを勉強していた際に各種設定は「.env」というファイルに記 ...
-
-
PHPからLINEのMessaging APIにリクエストし通知を送る方法
LINEから「2025/3/31にLINE Notifyのサービスが終了する」と ...
-
-
PHP8系で「Warning: Constant xxxxx already defined in」エラーの対応方法
PHP8系&WordPress6.4.3で「Warning: Const ...