PHPで日付の差分を計算する方法がないかと思ってちょっとGoogle検索したらあった。
と言うのも、MySQLには「TIMEDIFF」や「DATEDIFF」っていう関数があって、さっくりと日付の差分を出してくれる。補足しておくと「DIFF」ってのは、differenceの”diff”で、文字通り「差分」を意味する。
私はMariaDBを使っているのでちょっと見た目はことなるが、MySQLでは以下のとおり関数が利用できる
MariaDB [(none)]> select DATEDIFF(NOW(),'2014-01-20 09:00:00'); +---------------------------------------+ | DATEDIFF(NOW(),'2014-01-20 09:00:00') | +---------------------------------------+ | 5 | +---------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> select TIMEDIFF(NOW(),'2014-01-20 09:00:00'); +---------------------------------------+ | TIMEDIFF(NOW(),'2014-01-20 09:00:00') | +---------------------------------------+ | 129:20:37 | +---------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]>
同じようなことをPHPでやりたいのだ。
DateTime::diff を用いた日時の差分取得
DateTime関数の中の「diff」を用いて取得が出来ることがわかった。
オブジェクト指向型
[php]<?php
$datetime1 = new DateTime(‘2014-01-01’);
$datetime2 = new DateTime(date(‘Y-m-d h:i:s’));
$interval = $datetime1->diff($datetime2);
echo $interval->format(‘%d日%h時間%i分%s秒’) . “\n”;
?>[/php]
手書き型
[php]
<?php
$datetime1 = date_create(‘2014-01-01’);
$datetime2 = date_create(date(‘Y-m-d h:i:s’));
$interval = date_diff($datetime1, $datetime2);
echo $interval->format(‘%d日%h時間%i分%s秒’) . “\n”;
?>
[/php]
実際にやってみるとこうなる。
[root@vps1 tmp]# cat date.php <?php $datetime1 = new DateTime('2014-01-01'); $datetime2 = new DateTime(date('Y-m-d h:i:s')); $interval = $datetime1->diff($datetime2); echo $interval->format('%d日%h時間%i分%s秒') . "\n"; ?> [root@vps1 tmp]# [root@vps1 tmp]# date ; php date.php Sat Jan 25 18:36:29 JST 2014 24日6時間36分29秒 [root@vps1 tmp]#
参考にしたサイト:
php.net DateTime::diff
以上
コメント