2つの日付の差を、何年何月何日というフォーマットで表示するDateInterval::format(php5.3以上)を使ってみた。
日付の差分はコンピュータでは扱いずらいので、UNIX秒(秒数)などで管理するのが通例ですが、人間的には読みづらい。
そこで日数(500日)で表示するのだが、これでも人間的じゃない。
入社してから今日まで「何年何ヶ月何日」ってフォーマット表示してくれ!という要望があったので調べてみたら、phpの標準関数にあった。
ただし解釈の幅が出てしまう(月末日の場合、同じ日になったら1ヶ月なのか、その月の末日まで行かないと1ヶ月ではないのか?)
※ 2/28から3/29は、まだ一ヶ月たっているのか立っていないのか?(この関数的には1ヶ月経っている解釈)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $startDate = new DateTime('2015-02-28'); // こっちは合計366日 $endDate = new DateTime('2016-02-29'); // 1 年 0 ヶ月 1 日目 //$startDate = new DateTime('2016-02-29'); // こっちだと合計365日 //$endDate = new DateTime('2017-02-28'); // 0 年 11 ヶ月 28 日目 $interval = $endDate->diff($startDate); // %a は総日数 echo $interval->format('合計%a日 ')."<br>\n"; // %d は、月数に含まれない日数のみ echo $interval->format('%y 年 %m ヶ月 %d 日目'); |
参考URL
http://phpspot.net/php/man/php/dateinterval.format.html
これでOKかな~。と思ったら、diff関数なので同日だと0日になってしまうのはNG!(日数カウントしたいので+1からスタート)
1 2 3 4 5 6 7 8 9 10 |
<?php $startDate = new DateTime('2015-02-28'); // 入社日とか // 比較対象の本日日付を+1日するのがコツ。これで月末日なら翌月に自動的に繰り上がる。 // 入社日とか、結果の年月日に対して+1日すると月が繰り上がらない! $nowDate = new Datetime(); $tomorrowDate = $nowDate->modify("1 day"); // 後は同じ。 $interval = $tomorrowDate->diff(new DateTime(startDate )); echo $interval->format('%y年%mヶ月%d日目'); |