PHPの日付判定について考える(3)
PHPでの日付比較で詰まった部分を書いていますが、他のところでも影響していて悩んでいた経緯があります。
DBでやろうと試す
最初はDBの時刻型から ○時間後を求めるをやっていた。
ある時間から +27時間後を登録しようとしてエラーが発生した。
理由としてはpostgresのtime型にある。
最古:00:00:00.00
最新:23:59:59.99
http://www.postgresql.jp/document/8.4/html/datatype-datetime.html
24時以上の数値がない。。。まぁ、そうですよね。時刻型ですものね。
なぜdatetime型でやらなかったか悔やまれるところですが、諸事情により。
timestamp値取得の別方法
途中でmktimeの関数をみて日付に加減算をしている例があり、そちらに飛びつく。
こちらも時間の部分に24以上を使用しても問題ないです。
http://www.php.net/manual/ja/function.mktime.php
mktime(時間, 分, 秒, 月, 日, 年)
date('Y-m-d H:i:s', mktime(0, 0, 0, date("m"), date("d"), date("Y")));
date('Y-m-d H:i:s', mktime(27, 0, 0, date("m"), date("d"), date("Y")));
date('Y-m-d H:i:s', mktime(27, 0, 0, date("m"), date("d"), date("Y")+1 ));
出力結果(2014/6/2実行)
2014-06-02 00:00:00
2014-06-03 03:00:00
2015-06-03 03:00:00
その他にも考える必要があること
実はこれだけだと、求めたい結果の日付にならない場合がある。
date('Y-m-d H:i:s', strtotime('2014-05-31 +1 month'));
さぁ、どういう結果が正しいと思いますか?