追記(2012/01/08)
こんなものはバグでも何でもなく、例えば
2012-01-08と、2012-01-08を比較したら、0が返ってきます。
これと同じ容量で、
2012-01-01と2012-01-31の差分の結果は、30です。そりゃあそうか。
というわけで、
<?php echo get_diff_day('2011-01-01', '2012-01-01'); echo get_diff_day('2012-01-01', '2013-01-01');
の結果は365、366です。
いつぞやにこんな感じの関数を紹介したと思うんですが…
<?php function substrDate($date, &$year, &$month, &$day) { // 一応引数チェックをここでやる $match = '/^\d{4}\-\d{2}\-\d{2}\s+\d{2}\:\d{2}\:\d{2}|^\d{4}\-\d{2}\-\d{2}/'; if(!preg_match($match, $date)) { return; } $year = substr($date, 0, 4); if(substr($date, 5, 1) == 0) { $month = substr($date, 6, 1); } else { $month = substr($date, 5, 2); } if(substr($date, 8, 1) == 0) { $day = substr($date, 9, 1); } else { $day = substr($date, 8, 2); } } // 日数比較関数の改良版('YYYY-MM-DD' もしくは 'YYYY-MM-DD HH:II:SS') function get_diff_day($date1, $date2) { substrDate($date1, $year1, $month1, $day1); substrDate($date2, $year2, $month2, $day2); $date1time = mktime(0, 0, 0, $month1, $day1, $year1); $date2time = mktime(0, 0, 0, $month2, $day2, $year2); $diff_day = ($date2time - $date1time)/(60*60*24); return $diff_day; } $days = get_diff_day('2012-01-01', '2012-12-31'); echo $days;
とても鬱陶しいのですが、上記$daysの結果は閏年だから
366
と出る筈ですが、
365
と出ます。
なんでかなあ。
<?php // $days = compareDate('2012-02-01', '2012-03-01'); // echo $days;
とやると、
29
が返ってくるんです。
<?php // $days = compareDate('2012-02-01', '2012-03-01'); // echo $days . "\n"; // $days = compareDate('2012-02-01', '2012-03-02'); // echo $days;
29
30
と出るのに。原因が分かりません。