DateTimeクラスは日付や時間を扱うための標準的なオブジェクトです。
DateTimeオブジェクトを使用することで、日付や時間の演算や比較などが容易になります。
またDateTimeオブジェクトには引数を渡すことも可能です
引数に日付文字列やタイムスタンプを渡すことで、 指定した日時を表すDateTimeオブジェクトを作成することもできます
DateTimeオブジェクトは、以下のようにしてインスタンス化することができます。
現在の日付と時間を取得する
$datetime = new DateTime();
2023-03-21の日付となります
$datetime = new DateTime('2023-03-21');
2022-03-21 12:00:00のUNIXタイムスタンプ
$unixtime = 1647957600;
$date = new DateTime($unixtime);
DateTimeオブジェクトには、以下のようなメソッドが用意されています。
- format():指定したフォーマットで日時を文字列に変換する。
- modify():日時に対して演算を行う。
- diff():別の日時との差分を取得する。
- add($interval):指定されたインターバルを加えます。
- sub($interval):指定されたインターバルを減じます。
- setTimezone():タイムゾーンを設定する
- getTimestamp():UNIXタイムスタンプを取得する。
DateTimeのサンプルプログラムで確認してみましょう
<?php
$date1 = new DateTime('2023-03-21 10:00:00');
$date2 = new DateTime('2023-03-21 12:30:00');
$diff = $date1->diff($date2);
echo $diff->format('%H時間%i分');
?>
このコードは、2つの日付と時間を表すDateTimeオブジェクトを作成し、その差分を計算して表示します。
diff()メソッドには、比較対象となるDateTimeオブジェクトを渡すことで、
その差分をDateIntervalオブジェクトとして返します。
format()メソッドには、差分を指定したフォーマットで表示するための文字列を渡します。
この場合、’%H時間%i分’というフォーマット文字列を指定しているため、時間と分がそれぞれ表示されます。
DateIntervalオブジェクトについて
PHPのDateIntervalクラスは、2つの日付の間の時間差を表すオブジェクトです。このオブジェクトは、時間の長さを表す値(年、月、日、時間、分、秒)を格納することができます。
間隔値はPから始まる文字列で日付期間を指定します。
P => プレフィックス
Y => 年を指定
M => 月を指定
D => 日を指定
W => 週を指定
T => 時分秒の指定する前に必ずつける
H => 時間を指定
M => 分を指定
S => 秒を指定
P1D:1日を表す。
PT1H30M:1時間30分を表す。
P2DT3H4M:2日3時間4分を表す。
P1Y2M3DT4H5M6S:1年2ヶ月3日4時間5分6秒を表す。
また、DateTimeと組み合わせると日付の加算減算が簡単に行えます
例えば、以下のようにしてDateIntervalオブジェクトを作成することができます
<?php date_default_timezone_set('Asia/Tokyo'); $interval = new DateInterval('P2023Y2M3DT4H5M6S'); echo $interval->format('%y年%m月%d日 %H時%i分%s秒');
// 2023年2月3日 04時5分6秒 が出力されます
?>
DateTimeとDateIntervalを組み合わせたサンプルプログラムで確認してみましょう
<?php
date_default_timezone_set('Asia/Tokyo');
$date = new DateTime('2023-02-05 10:10');
// 3日後
$date->add(new DateInterval('P3D'));
echo $date->format('Y-m-d H:i:s'). PHP_EOL; // 出力:2023-02-08 10:10:00
// 2時間前
$date = new DateTime('2023-02-05 10:10');
$date->sub(new DateInterval('PT2H'));
echo $date->format('Y-m-d H:i:s'). PHP_EOL; // 出力:2023-02-08 08:10:00
// 1週間後
$date = new DateTime('2023-02-05 10:10');
$date->add(new DateInterval('P1W'));
echo $date->format('Y-m-d H:i:s'). PHP_EOL; // 出力:2023-02-15 08:10:00
// 30分前
$date = new DateTime('2023-02-05 10:10');
$date->sub(new DateInterval('PT30M'));
echo $date->format('Y-m-d H:i:s'). PHP_EOL; // 出力:2023-02-15 07:40:00
?>
上記のコードをコピペして下記のサイトで実際にPHPコードを実行してみましょう
本サイトでは、基礎的な学習は開発環境を構築しないで、webで実行します。
コピペで動作したら、今度は自分で実際にコードをトレースしてコーディングしてみましょう
効率的にプログラムを学習するなら必ず、手打ちすることです。
打つことで、アウトプットして覚えていきます。