Twitterを使用していたりするとツイートした時間から、ツイート表示時点での経過時間がタイムライン上のツイート上に表示されていたりします。
今回の記事では、PHPで経過時間を求める方法について紹介します。
DateTime::diffメソッドを使用する(PHP 5.3.0以上の場合)
PHP 5.3.0以上の場合、比較的簡単に時間の経過時間を求めることが出来ます。
その方法は、DateTime::diffメソッドを使用する方法です。
//過去の日時を指定 $date_before = new DateTime('2017-04-02 23:59:59'); //現在の日時を設定 $date_now = new DateTime(); $interval = $date_before->diff($date_now); $elapsed = $interval->format('%y years %m months %d days %h hours %i minutes %s seconds'); echo $elapsed;
上記のプログラムを実行すると下記のような結果が出ます。
1 years 1 months 20 days 10 hours 22 minutes 38 seconds
このコードではformatメソッドを使って「書式付き」という特殊な形で経過時間を取得しています。
formatメソッドの引数に「%d」等と与えることで日付の差を得ることができます。
他にもより簡単な方法として下記のような方法があります。
//過去の日時を指定 $date_before = new DateTime('2017-04-02 23:59:59'); //現在の日時を設定 $date_now = new DateTime(); $interval = $date_before->diff($date_now); echo $interval->y.' years '.$interval->m.' months '.$interval->d.' days '.$interval->h,' hours '.$interval->i .'minutes '.$interval->s.' seconds';
diffメソッドで日付を比較し、その戻り値のy/m/d/h/i/sといったプロパティにアクセスすることで、日付の差分を出すことが出来ます。
DateTime::diffメソッドのバグ
Bug #51184 DateInterval has incorrect days property on windows
ほとんどの場合、大丈夫ですが、このDateTime::diffメソッドにはバグも報告されています。
Datetime::diffで日付を比較しても常に戻り値に6015が戻ってきてしまうバグということです。
もし、このような結果に悩んでいる方は、リンク先を参照してみてください。
PHP5.3.0未満の場合
今では、PHP5.3.0未満で動いている環境はあまりないと思いますが、Datetime::diffを使用したくないなど何らかの理由がある場合は、下記のような方法で、二つの日付の経過時間を求めることが出来ます。しかし、正確にやるためにはより複雑なロジックが必要となります。
下記の例では、1ヶ月を30日と固定しています。
$date1 = "2007-03-24"; $date2 = "2009-06-26"; $diff = abs(strtotime($date2) - strtotime($date1)); $years = floor($diff / (365*60*60*24)); $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); printf("%d years, %d months, %d days\n", $years, $months, $days);
Unixタイムスタンプの差から経過時間を求める方法ですが、もし、自分で日付の差を求めたい場合がある方などは、参考にしてください。
「How to calculate the difference between two dates using PHP?」に正確に求める方法も記載されているので、参考にしてみてください。
PHPの日付時刻関連のライブラリ
PHPには、日付時刻関係の有名なライブラリが、あります。
曜日を算出したり、日付の差などの比較など色々な操作を直感的に行えます。
興味のある方は、下記の記事を参照ください。
[参考]
・How to calculate the difference between two dates using PHP?