Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. DateTime クラス

DateTime クラス対応: PHP 5.3(2009)

オブジェクト指向で日時を操作するクラスです。日時の作成・フォーマット・加算・減算・比較・差分計算など、日時に関するあらゆる操作をメソッドチェーンで扱えます。

構文
// 現在または指定した日時でオブジェクトを作成します。
$dt = new DateTime($datetime, $timezone);

// 日時をフォーマットして文字列で返します。
$dt->format($format);

// 相対的な日時表現で日時を変更します。
$dt->modify($modifier);

// DateInterval を加算します。
$dt->add($interval);

// DateInterval を減算します。
$dt->sub($interval);

// 2つの日時の差分を DateInterval で返します。
$dt->diff($targetDateTime);
メソッド一覧
メソッド概要
new DateTime($datetime)日時オブジェクトを作成します。引数を省略すると現在日時、文字列を渡すと『strtotime()』と同様にパースされます。
format($format)『date()』と同じフォーマット文字列で日時を整形します。
modify($modifier)『"+1 day"』『"next Monday"』などの相対表現で日時を変更します。オブジェクト自体が更新されます。
add(DateInterval $interval)DateInterval オブジェクトを使って日時を加算します。
sub(DateInterval $interval)DateInterval オブジェクトを使って日時を減算します。
diff(DateTime $target)2つの DateTime の差分を DateInterval オブジェクトで返します。
戻り値

『format()』はフォーマットされた日時文字列を返します。『modify()』『add()』『sub()』は自分自身のオブジェクトを返すため、メソッドチェーンが可能です。『diff()』はDateIntervalオブジェクトを返します。

サンプルコード
<?php
// 現在の日時でオブジェクトを作成します。
$now = new DateTime();
echo $now->format("Y-m-d H:i:s"); // 現在の日時が出力されます。

// 文字列から日時オブジェクトを作成します。
$dt = new DateTime("2025-04-15 10:30:00");
echo $dt->format("Y年m月d日 H時i分"); // 『2025年04月15日 10時30分』と出力されます。

// modify() で日時を変更します。
$dt->modify("+1 month");
echo $dt->format("Y-m-d"); // 1か月後の『2025-05-15』と出力されます。

// メソッドチェーンで連続操作します。
$result = (new DateTime("2025-01-01"))->modify("+6 months")->format("Y-m-d");
echo $result; // 『2025-07-01』と出力されます。

// add() と sub() で DateInterval を使った加減算をします。
$dt2 = new DateTime("2025-04-15");
$dt2->add(new DateInterval("P10D")); // 10日を加算します。
echo $dt2->format("Y-m-d"); // 『2025-04-25』と出力されます。

$dt2->sub(new DateInterval("P2M")); // 2か月を減算します。
echo $dt2->format("Y-m-d"); // 『2025-02-25』と出力されます。

// diff() で2つの日時の差分を求めます。
$start = new DateTime("2025-01-01");
$end = new DateTime("2025-04-15");
$interval = $start->diff($end);
echo $interval->days . "日"; // 『104日』と出力されます。
echo $interval->format("%m か月と %d 日"); // 『3 か月と 14 日』と出力されます。

// 年齢を計算する実用例
$birthday = new DateTime("1990-08-20");
$today = new DateTime();
$age = $birthday->diff($today);
echo $age->y . "歳"; // 現在の年齢が出力されます。

// タイムゾーンを指定して作成します。
$tokyo = new DateTime("now", new DateTimeZone("Asia/Tokyo"));
$utc = new DateTime("now", new DateTimeZone("UTC"));
echo $tokyo->format("H:i") . " / " . $utc->format("H:i"); // 日本時間とUTCの時差が確認できます。

// DateTimeImmutable を使うとオブジェクトが変更されません。
$original = new DateTimeImmutable("2025-04-15");
$modified = $original->modify("+1 day"); // 新しいオブジェクトが返されます。
echo $original->format("Y-m-d"); // 元のオブジェクトは『2025-04-15』のままです。
echo $modified->format("Y-m-d"); // 変更後は『2025-04-16』です。
概要

DateTime クラスはPHP5.3で導入された、日時操作のためのオブジェクト指向APIです。『date()』や『strtotime()』と同等の機能に加えて、タイムゾーン管理や差分計算など高度な操作も扱えます。

DateTime オブジェクトはミュータブルのため、『modify()』『add()』『sub()』を呼ぶとオブジェクト自体が変更されます。意図しない変更を防ぎたい場合は『DateTimeImmutable』を使用してください。DateTimeImmutable はメソッド呼び出しごとに新しいオブジェクトを返すため、元のオブジェクトは変化しません。

DateInterval の書式は ISO 8601 の期間表記に基づいており、『"P1Y2M3D"』は1年2か月3日、『"PT1H30M"』は1時間30分を表します。P の後に時間を指定する場合は T を挟む必要があります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。