DateTimeクラスについて

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で実行します。
コピペで動作したら、今度は自分で実際にコードをトレースしてコーディングしてみましょう
効率的にプログラムを学習するなら必ず、手打ちすることです。
打つことで、アウトプットして覚えていきます。

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要24言語に対応。プログラミング学習にも。
タイトルとURLをコピーしました