勉強したことのメモ

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にて西暦から干支(十二支)を計算し表示する方法

先日MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表 ...

PHPでCSVを簡単に取り扱える「LeagueCSV(thephpleague / csv)」の利用方法

PHPでCSVファイルの書き込みや読み込みを行う際、バニラPHPで対応していたが ...

PHPで配列内から重複を削除する

やりたかった事はそのまま、配列内から重複を削除したかった。 ■参考サイト htt ...

PHPでステータスコードを取得する方法

サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視して ...

Cookieをできるだけ長い期間保存する方法

あるシステムの中でCookieを可能な限り長い期間保存したいというリクエストを受 ...