もくじ
DateTimeクラスとは
DateTimeクラスは年月日と時刻の情報を持つもので、そのメソッドを使うと日時の加減算や比較などの演算ができる。
単純に文字列で表現しただけの年月日や時刻では難しい処理も、このDateTimeクラスを使えば簡単にできるのだ。
日時の表現
現在時刻の表現
$dateTime = new \DateTime();
年月日の表現
$dateTime = new \DateTime('2020-09-06');
次でも同じことができる。
$dateTime = \DateTime::createFromFormat('Y/m/d', '2020/09/06');
年月日と時刻の表現
$dateTime = new \DateTime('2020-09-06 14:34:56');
次でも同じことができる。
$dateTime = \DateTime::createFromFormat('Y/m/d H:i:s', '2020/09/06 14:34:56');
日時の編集
$dateTime = new \DateTime();
$dateTime->setDate(2020, 9, 6); // 2020年9月6日
$dateTime = new \DateTime();
$dateTime->setDate(2020, 9, 6); // 2020年9月6日
$dateTime->setTime(14, 34, 56); // 14時34分56秒
進める/戻す
“+1 days” や “-1 days” などの文字列を使って、年月日や時刻の加算/減算ができる。
計算する数が単数か複数かによらず、例えば日付の計算なら “day” でも “days” でも同じように動作するのでどちらを使っても構わない。
2年進める/戻す
// 2年進める
$dateTime->modify('+2 years');
// 2年戻す
$dateTime->modify('-2 years');
2ヶ月進める/戻す
// 2ヶ月進める
$dateTime->modify('+2 months');
// 2ヶ月戻す
$dateTime->modify('-2 months');
2週間進める/戻す
// 2週間進める
$dateTime->modify('+2 weeks');
// 2週間戻す
$dateTime->modify('-2 weeks');
2日進める/戻す
// 2日進める
$dateTime->modify('+2 days');
// 2日戻す
$dateTime->modify('-2 days');
2時間進める/戻す
// 2時間進める
$dateTime->modify('+2 hours');
// 2時間戻す
$dateTime->modify('-2 hours');
2分進める/戻す
// 2分進める
$dateTime->modify('+2 minutes');
// 2分戻す
$dateTime->modify('-2 minutes');
2秒進める/戻す
// 2秒進める
$dateTime->modify('+2 seconds');
// 2秒戻す
$dateTime->modify('-2 seconds');
日時の取得
年の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('Y'); // 2020
月の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('m'); // 09
日の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('d'); // 06
曜日の取得
曜日の取得方法は少し特殊だ。
日曜日は0、月曜日は1、火曜日は2、という具合に数値として取得できる。
例えば、2020年9月6日は日曜日なので、次の例のように数値の「0」で表現される。
$dateTime = new \DateTime('2020-09-06 14:34:56');
// まずは数値を取得して・・・
$w = $dateTime->format('w');
echo $w; // 0
// 次のような配列を用意して・・・
$week = array( "日", "月", "火", "水", "木", "金", "土" );
// 次のようにすれば日本語の曜日が取得できる。
echo $week[$w]; // 日
時の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('H'); // 14
分の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('i'); // 34
秒の取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('s'); // 56
好きなフォーマットで取得
$dateTime = new \DateTime('2020-09-06 14:34:56');
echo $dateTime->format('Y年m月d日 H時i分s秒'), "\n"; // "2020年09月06日 14時34分56秒" + 改行
日時の比較
$dateTimeA = \DateTime::createFromFormat('Y-m-d', '2020-09-06');
$dateTimeB = \DateTime::createFromFormat('Y-m-d', '2020-09-05');
// 差分
$diff = $dateTimeA->diff($dateTimeB);
// $dateTimeA から見て $dateTimeB が遅れているかどうかを判定する。
$invert = $diff->invert;
echo $invert; // この例では 1 が出力される。
$invert は、$dateTimeA から見て $dateTimeB が遅れている場合は 1 となる。それ以外は0。
従って、上の例の echo の結果は 1 となる。