スキップしてメイン コンテンツに移動

PHP8不変日時差分

PHP8不変日時差分

PHP8での日時操作

PHP8 では日時操作がより直感的になりました。DateTimeImmutable を使うことで、現在時刻 を取得し、タイムゾーン を簡単に切り替えることができます。例えば、東京時間で現在時刻を取得する場合は次のように書きます。

$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');

このコードは、format メソッドで任意のフォーマットを指定し、文字列として出力します。PHP8 の DateTimeImmutable は不変オブジェクトであるため、元のインスタンスは変更されず、新しいインスタンスが返されます。

DateTimeImmutableと不変オブジェクト

不変オブジェクトは、状態を変更できないオブジェクトです。DateTimeImmutable はその代表例で、日時を操作する際に副作用を防ぎます。例えば、modify メソッドを呼び出すと、新しいインスタンスが生成されます。

$original = new DateTimeImmutable('2026-01-09 12:00:00');
$modified = $original->modify('+1 day');
echo $original->format('Y-m-d H:i:s'); // 2026-01-09 12:00:00
echo $modified->format('Y-m-d H:i:s'); // 2026-01-10 12:00:00

このように、元のオブジェクトは不変であるため、予期せぬ変更が起こりません。開発者は安全に日時を扱うことができ、テストも容易になります。

日付計算とdiffの活用

日付計算は DateIntervaldiff メソッドで簡単に行えます。例えば、2つの日付の差を求める場合は次のようにします。

$start = new DateTimeImmutable('2026-01-01');
$end   = new DateTimeImmutable('2026-01-15');
$interval = $start->diff($end);
echo $interval->format('%a 日間'); // 14 日間

さらに、DateInterval を使って複雑な期間を作成し、addsub で計算できます。タイムゾーンを変更したい場合は、setTimezone を使用します。

$dt = new DateTimeImmutable('now', new DateTimeZone('UTC'));
$dt = $dt->setTimezone(new DateTimeZone('Europe/Paris'));
echo $dt->format('Y-m-d H:i:s');

このように、PHP8 の日時操作は強力で柔軟です。DateTimeImmutableDateInterval を組み合わせることで、正確で安全な日付計算が可能になります。

この記事はAIによって作成されました。

コメント