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

目次
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日の間隔」を表すことができるということですね。
今度から、相対的な日時を求めるときは、こちらを使うようにします。
〔参考サイト〕