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

php

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日の間隔」を表すことができるということですね。

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

〔参考サイト〕

php

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次