日付差

二つの日時の日数の差のお話

「2011-11-07 00:00:01」と「2011-11-06 23:59:59」の差はどれだけでしょうか?
時間差はもちろん2秒なわけですが、日付をまたいでいるので日数の差は1日と処理したいところです。

MySQLなら次のように結果を得られます。
select datediff("2011-11-07 00:00:01","2011-11-6 23:59:59");
結果
1
ちゃんと1日が得られます。

PHPには5.3からDateTimeというクラスが用意されました。
$d1 = new DateTime('2011-11-7 0:0:1');
$d2 = new DateTime('2011-11-6 23:59:59');
$di = $d1->diff($d2);
print_r($di);
結果
DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 0 [i] => 0 [s] => 2 [invert] => 1 [days] => 0 )
はい?
得られたのは2秒という情報のみ(笑)
わざわざクラスまで用意して何がしたかったのか意味不明。
時間差なんてタイムスタンプ引き算するだけでわかるので、何がしたいのかほんと謎。

ということで自力算出しかない。
//$t1,$t2二つのタイムスタンプ間の日付差を求める
function GetDateDiff($t1,$t2)
{
$t1 = (int)*1;
$t2 = (int)*2;
return ($t1-$t2);
}
+9*60*60は時差修正。つまり日本時間専用。
/(24*60*60)で1970-1-1からの経過秒数が経過日数になります。
unix timeに閏秒がない喜びをかみしめる瞬間。
最後に($t1-$t2)で日数の差となります。

ネットで検索して出てくる例はほとんど差をとって(24*60*60)で割っているが、
例としてmktime()で時間を0としてタイムスタンプを作っているからうまくいっているだけ。
それではtime()で取得したタイムスタンプをそのまま使うと正しく動作しない。
先に(24*60*60)で割って時間部分を切り捨てることが必要。

*1:$t1+9*60*60)/(24*60*60

*2:$t2+9*60*60)/(24*60*60