[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 メーリングリストの案内