[PHP-users 31829] Re: 1970年以前の指定日から現在まで何日経過しているか確認する方法
best @ jf.bitter.jp
best @ jf.bitter.jp
2007年 4月 5日 (木) 15:58:34 JST
こんにちは、ニコラスです。
進藤様、
おおぐま様
神田様、
takay様
わかりやすく教えていただきありがとうございました。
takay様のロジック参考にさせていただきます。
また、何かございましたら、よろしくお願いします。
>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 mailing list PHP-users @ php.gr.jp
>http://ml.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://www.php.gr.jp/php/novice.php3
>
>
PHP-users メーリングリストの案内