kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

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'));

 

さぁ、どういう結果が正しいと思いますか?