1. TOPTOP
  2. Webサービス
  3. PHP

PHPで相対的な日時を求めたいときの方法。DateTimeクラス、subメソッド、formatメソッド、DateIntervalクラスについて

|

php

PHPで相対的な日時(現在から1日前とか5時間後とか)を、求めたいと考えています。

そのためには、date関数とstrtotime関数を使うと思っていましたが、PHP逆引きレシピ 第2版の「レシピ67(P182)」を読んでいると、そうではないことに気づきました。

date関数とstrtotime関数では非推奨

個人的に、今まではこんな書き方をしていました。

<?php
  echo date('Y-m-d', strtotime('-1 day'));
?>

ですが、PHP5.3以上では、date関数とstrtotime関数を用いた日時の加減算は、推奨されていません。

DateTimeクラスとsubメソッドとformatメソッド

現在からの相対的な日時を求めるためには、DateTimeクラスsubメソッドformatメソッドなどを用います。

例では、日時の減算をするためにsubメソッドが用いられていますが、addメソッドにすると加算ができます。

<?php
  $now = new DateTime();
  $now->sub(DateInterval::createFromDateString('1 day'));
  echo $now->format('Y/m/d H:i:s');
?>

ぱっと見た感じ、DateTimeクラスとsubメソッド、formatメソッドは何をやっているのか分かります。

  • DateTimeクラス→日付・時刻の演算を行うためのクラス
  • subメソッド→日付・時刻値の減算を行う
  • formatメソッド→DateTimeクラスによるオブジェクトを整形する

DateInterval::createFromDateStringも、なんとなく分かります。しかし文字列の途中にある、”::”が見慣れません。

DateInterval::createFromDateStringは時間の間隔

PHPマニュアルを見ると、DateIntervalについて説明されたページがありますが、DateInterval::createFromDateStringとして独立した説明(新しいタブで開く)もなされています。

相対指定文字列から DateInterval を作成する。通常の日付パーサを用いて、パースされた相対指定文字列から DateInterval を設定します。

つまり、DateInterval::createFromDateString(‘1 day’)という塊にすることで、「1日の間隔」を表すことができるということですね。

今度から、相対的な日時を求めるときは、こちらを使うようにします。

〔参考サイト〕