[ PHP ] DateTime で日時の比較と差分の抽出

Pocket

ここでは、DateTime で管理された日時データの比較および差分を抽出するサンプルコードを掲載しています。

スポンサーリンク

比較演算子で日時を比較する

PHP 5.2.2 以降では、比較演算子での日時の比較ができるようになりました。

$date1 = new DateTime();
$date1->setDate(2010, 11, 10); // 日付を設定
$date1->setTime(12, 10, 11);   // 時間を設定

$date2 = new DateTime();
$date2->setDate(2010, 11, 10); // 日付を設定
$date2->setTime(12, 10, 10);   // 時間を設定

var_dump($date1 == $date2);    // true

ポイント

  • 比較演算子は ‘ == ‘ を使うこと。’ === ‘ では、常に false がリターンされる
  • 日付のみではなく、時間もすべて一致している必要がある

DateTime::diff で日時の差分を抽出する

PHP 5.3.0 以降では、DateTime::diff メソッドを使って日時の差分を取得できるようになりました。

$date1 = new DateTime();
$date1->setDate(2010, 11, 15)
      ->setTime(12, 10, 10);

$date2 = new DateTime();
$date2->setDate(2010, 11, 15)
      ->setTime(12, 10, 10);

$interval = $date1->diff($date2);
var_dump($interval->invert); // 0

/*
 * $ret
 * --------------------------------------
 * date1 が大きい場合: 1
 * date2 が大きい場合: 0
 * date1 と date2 が等しい場合:0
 */

invert プロパティでは、比較した日時が大きいのか等しいかまでは判断ができません。invert プロパティのみではなく、その他のプロパティが 0 であるかも確認する必要があります。日時が等しい場合は、以下のプロパティがすべて 0 となります。

var_dump($interval->y); // 年の差分
var_dump($interval->m); // 月の差分
var_dump($interval->d); // 日の差分
var_dump($interval->h); // 時の差分
var_dump($interval->i); // 分の差分
var_dump($interval->s); // 秒の差分

参考

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *