クラス DateTimeImmutable

クラス DateTimeImmutable は、DateTime の不変なバージョンです。変更を行うたびに新しいオブジェクトを生成するため、より予測可能で安全に作業できます。

現在の日時

現在の日時を持つ DateTimeImmutable オブジェクトを作成してみましょう:

php<?php
  $date = new DateTimeImmutable();
?>

特定の日付

指定された日付で DateTimeImmutable オブジェクトを作成してみましょう:

php<?php
  $date = new DateTimeImmutable('2025-12-31');
?>

特定の日付と時刻

指定された日付と時刻で DateTimeImmutable オブジェクトを作成してみましょう:

php<?php
  $date = new DateTimeImmutable('2025-12-31 12:59:59');
?>

出力のフォーマット

作成した日付は、format メソッドを使用して指定されたフォーマットで出力できます。現在の日時に対してこれを実行してみましょう:

php<?php
  $date = new DateTimeImmutable();
  echo $date->format('Y-m-d H:i:s');
?>

結果(実行タイミングによって変化します):

php'2025-11-15 14:25:00'

指定日付のフォーマット

指定された日付をフォーマットしてみましょう:

php<?php
  $date = new DateTimeImmutable('2025-12-31');
  echo $date->format('d.m.Y');
?>

コード実行結果:

php'31.12.2025'

間隔の追加

日付への間隔の追加は、add メソッドを通じて行われます:

php<?php
  $date = new DateTimeImmutable('2025-05-15');
  $interval = new DateInterval('P10D'); // 10日間
  $newDate = $date->add($interval);
  echo $newDate->format('Y-m-d');
?>

コード実行結果:

php'2025-05-25'

間隔の減算

日付からの間隔の減算は、sub メソッドを通じて行われます:

php<?php
  $date = new DateTimeImmutable('2025-05-15');
  $interval = new DateInterval('P1M2D'); // 1ヶ月と2日間
  $newDate = $date->sub($interval);
  echo $newDate->format('Y-m-d');
?>

コード実行結果:

php'2025-04-13'

新しい日付の設定

DateTimeImmutable オブジェクトに新しい日付を設定できます。これは setDate メソッドを使用して行います:

php<?php
  $date = new DateTimeImmutable();
  $newDate = $date->setDate(2024, 12, 31);
  echo $newDate->format('Y-m-d');
?>

コード実行結果:

php'2024-12-31'

時刻の設定

DateTimeImmutable オブジェクトに新しい時刻を設定できます。これは setTime メソッドを使用して行います:

php<?php
  $date = new DateTimeImmutable();
  $newDate = $date->setTime(15, 30, 0);
  echo $newDate->format('H:i:s');
?>

コード実行結果:

php'15:30:00'

日付の比較

日付を持つオブジェクトを比較できます:

php<?php
  $date1 = new DateTimeImmutable('2025-01-01');
  $date2 = new DateTimeImmutable('2025-02-01');
  
  if ($date1 < $date2) {
    echo '+++';
  } else {
    echo '---';
  }
?>

タイムゾーンを指定したオブジェクトの作成

DateTimeImmutable オブジェクトを作成する際に、タイムゾーンを指定できます:

php<?php
  $timeZone = new DateTimeZone('Europe/Moscow');
  $date = new DateTimeImmutable('2025-12-31 23:59:59', $timeZone);
  
  echo $date->format('Y-m-d H:i:s e');
?>

コード実行結果:

php'2025-12-31 23:59:59 Europe/Moscow'

関連項目