勉強したことのメモ

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とLINEを連携させて通知を送る方法(file_get_contents / curlの2パターン)

PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...

PHPからRedisを利用する際のよく使う構文について

PHPからRedisを利用する際のよく使う構文について以下にメモ。   ...

LINEのURLプレビューを表示させないようPHP側で制御する方法

公開中の特定のページのみLINEのURLプレビューを表示させないよう制御したいと ...

PHPでプロキシ経由で他サーバーに接続する方法(file_get_contents / curlの2パターン)

PHPでfile_get_contentsやcurlで他サーバに接続する際に自サ ...

フォームからアップロードした画像にPHPでロゴ画像(透かし)を追加する方法

フォームから送られてきた画像に対してサイトロゴみたいなロゴ画像を右下等、指定の位 ...