PHPのDateTimeクラスのざっくりとした使い方

PHP, Web

もくじ


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 となる。

PHP, Web

Posted by もち