[PHP-users 31827] Re: 1970年以前の指定日から現在まで何日経過しているか確認する方法
takay
takay.ml @ gmail.com
2007年 4月 5日 (木) 11:51:36 JST
takayです。
#うるう年計算思いっきり間違ってました。^^;
> 計算する年が歴史的な年で1582年をまたぐ場合には注意が必要です。
> カトリックの国々では、1582年10月5日〜10月14日は、存在しません。
…も加味した修正コードです(ほんと、あってんのかな?^^;)
function days($ymd, $sep) {
$md = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$buf = explode($sep, $ymd);
$year = $buf[0] + 0;
$month = $buf[1] + 0;
$day = $buf[2] + 0;
if ( !checkdate($month, $day, $year) ) return false;
if ( $year == 1582 && $month == 10 )
if ( $day > 4 && $day < 15 ) return false; // ユリウス暦とグレゴリオ暦の間の日付
// 単純日数計算
$days = $year * 365;
for ( $i = ($month - 2) ; $i >= 0 ; $i-- ) $days += $md[$i];
$days += $day;
// うるう年加算
$days += floor(($year - 1) / 4); /* 4年に1度はうるう年 */
$days -= floor(($year - 1) / 100); /* 100年に1度は平年 */
$days += floor(($year - 1) / 400); /* 400年に1度はうるう年 */
$uru = 0;
if ( $year % 4 == 0 ) { /* 4年に1度はうるう年 */
$uru = 1;
if ( $year % 100 == 0 ) { /* 100年に1度は平年 */
$uru = 0;
if ( $year % 400 == 0 ) { /* 400年に1度はうるう年 */
$uru = 1;
}
}
}
if ( $uru == 1 && ( $month > 2 || ($month == 2 && $day == 29) ) ) $days += $uru;
// ユリウス暦とグレゴリオ暦の間の日付を取り除く
if ( $days >= 578091 ) $days -= 10;
return $days;
}
---
takay.ml @ gmail.com
PHP-users メーリングリストの案内