1月 252014
 
シェアする

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

以上

このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ