PHPで相対的な日時(現在から1日前とか5時間後とか)を、求めたいと考えています。
そのためには、date関数とstrtotime関数を使うと思っていましたが、PHP逆引きレシピ 第2版の「レシピ67(P182)」を読んでいると、そうではないことに気づきました。
date関数とstrtotime関数では非推奨
個人的に、今まではこんな書き方をしていました。
[php]
<?php
echo date(‘Y-m-d’, strtotime(‘-1 day’));
?>
[/php]
ですが、PHP5.3以上では、date関数とstrtotime関数を用いた日時の加減算は、推奨されていません。
DateTimeクラスとsubメソッドとformatメソッド
現在からの相対的な日時を求めるためには、DateTimeクラスのsubメソッドやformatメソッドなどを用います。
例では、日時の減算をするためにsubメソッドが用いられていますが、addメソッドにすると加算ができます。
[php]
<?php
$now = new DateTime();
$now->sub(DateInterval::createFromDateString(‘1 day’));
echo $now->format(‘Y/m/d H:i:s’);
?>
[/php]
ぱっと見た感じ、DateTimeクラスとsubメソッド、formatメソッドは何をやっているのか分かります。
- DateTimeクラス→日付・時刻の演算を行うためのクラス
- subメソッド→日付・時刻値の減算を行う
- formatメソッド→DateTimeクラスによるオブジェクトを整形する
DateInterval::createFromDateStringも、なんとなく分かります。しかし文字列の途中にある、”::”が見慣れません。
DateInterval::createFromDateStringは時間の間隔
PHPマニュアルを見ると、DateIntervalについて説明されたページがありますが、DateInterval::createFromDateStringとして独立した説明もなされています。
相対指定文字列から DateInterval を作成する。通常の日付パーサを用いて、パースされた相対指定文字列から DateInterval を設定します。
つまり、DateInterval::createFromDateString(‘1 day’)という塊にすることで、「1日の間隔」を表すことができるということですね。
今度から、相対的な日時を求めるときは、こちらを使うようにします。
〔参考サイト〕