開発メモ

開発用のメモです。

PHP n日後が休日の場合は日付を変更する。

<?php
$addDay = 10;
while( true ) {
    $temporary_expired_date = strtotime( '+' . $addDay . ' day' );
    switch (date("w", $temporary_expired_date )) {
        case "6" :
            # 土曜日
            $addDay ++ ;
        case "0" :
            # 日曜日
            $addDay ++ ;
            break;
        case "1" :
        # 月曜日
        # 01月第二
        # 07月第三
        # 09月第三
        # 10月第二
        case "2" :
        # 火曜日
        case "3" :
            # 水曜日

            $addDay ++ ;
            break;
        default :
            break;
    }
    switch (date( "n-j", $temporary_expired_date )) {
        # 正月3ヶ日
        case "1-1" :
            $addDay ++ ;
            continue;
        case "1-2" :
            $addDay ++ ;
            continue;
        case "1-3" :
            $addDay ++ ;
            continue;
        # 成人の日
        case "1-8" :
        case "1-9" :
        case "1-10" :
        case "1-11" :
        case "1-12" :
        case "1-13" :
        case "1-14" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 建国記念日
        case "2-11" :
            $addDay ++ ;
            continue;
        # 建国記念日(振り替え休日)
        case "2-12" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 春分の日・振り替え休日
        case "3-20" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '0' :
                    # 1960年 - 2088年までは3月20日
                    $addDay ++ ;
                    continue;
                case '1' :
                    # 1993年 - 2097年までは3月20日
                    $addDay ++ ;
                    continue;
                default :
                    break;
            }
            break;
        case "3-21" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '0' :
                    # 1960年 - 2088年までは3月20日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            $addDay ++ ;
                            continue;
                    }
                    break;
                case '1' :
                    # 1993年 - 2097年までは3月20日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            $addDay ++ ;
                            continue;
                    }
                    break;
                case '2' :
                    # 1902年 - 2022年までは3月21日
                    $addDay ++ ;
                    continue;
                case '3' :
                    # 1927年 - 2055年までは3月21日
                    $addDay ++ ;
                    continue;
                default :
                    break;
            }
            break;
        case "3-22" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '2' :
                    # 1902年 - 2022年までは3月21日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            $addDay ++ ;
                            continue;
                    }
                    break;
                case '3' :
                    # 1927年 - 2055年までは3月21日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            $addDay ++ ;
                            continue;
                    }
                    break;
                default :
                    break;
            }
            break;
        # 昭和の日
        case "4-29" :
            $addDay ++ ;
            continue;
        # 昭和の日(振り替え休日)
        case "4-30" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
        # 憲法記念日
        case "5-3" :
            $addDay ++ ;
            continue;
        # みどりの日
        case "5-4" :
            $addDay ++ ;
            continue;
        # こどもの日
        case "5-5" :
            $addDay ++ ;
            continue;
        # ゴールデンウィーク(振り替え休日)
        case "5-6" :
            # 月曜日・火曜日・水曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                case "2" :
                case "3" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 海の日
        case "7-15" :
        case "7-16" :
        case "7-17" :
        case "7-18" :
        case "7-19" :
        case "7-20" :
        case "7-21" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 山の日
        case "8-11" :
            if( date( "Y", $temporary_expired_date ) > 2015 ) {
                $addDay ++ ;
                continue;
            }
        # 山の日(振り替え休日)
        case "8-12" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    if( date( "Y", $temporary_expired_date ) > 2015 ) {
                        $addDay ++ ;
                        continue;
                    }
            }
            break;
        # 敬老の日
        case "9-15" :
        case "9-16" :
        case "9-17" :
        case "9-18" :
        case "9-19" :
        case "9-20" :
        case "9-21" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 秋分の日
        case "9-22" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '0' :
                    # 2012年 - 2096年までは9月22日
                    $addDay ++ ;
                    continue;
                default :
                    break;
            }
            break;
        case "9-23" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '0' :
                    # 2012年 - 2096年までは9月22日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            if( date( "Y", $temporary_expired_date ) > 2015 ) {
                                $addDay ++ ;
                                continue;
                            }
                    }
                    break;
                case '1' :
                    # 1921年 - 2041年までは9月23日
                    $addDay ++ ;
                    continue;
                case '2' :
                    # 1950年 - 2074年までは9月23日
                    $addDay ++ ;
                    continue;
                case '3' :
                    # 1950年 - 2074年までは9月23日
                    $addDay ++ ;
                    continue;
                default :
                    break;
            }
            break;
        case "9-24" :
            switch (date("Y", $temporary_expired_date )%4) {
                case '1' :
                    # 1921年 - 2041年までは9月23日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            if( date( "Y", $temporary_expired_date ) > 2015 ) {
                                $addDay ++ ;
                                continue;
                            }
                    }
                    break;
                case '2' :
                    # 1950年 - 2074年までは9月23日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            if( date( "Y", $temporary_expired_date ) > 2015 ) {
                                $addDay ++ ;
                                continue;
                            }
                    }
                    break;
                case '3' :
                    # 1950年 - 2074年までは9月23日
                    # 月曜日
                    switch (date("w", $temporary_expired_date )) {
                        case "1" :
                            if( date( "Y", $temporary_expired_date ) > 2015 ) {
                                $addDay ++ ;
                                continue;
                            }
                    }
                    break;
                default :
                    break;
            }
            break;
        # 体育の日
        case "10-8" :
        case "10-9" :
        case "10-10" :
        case "10-11" :
        case "10-12" :
        case "10-13" :
        case "10-14" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 文化の日
        case "11-3" :
            $addDay ++ ;
            continue;
        # 文化の日(振り替え休日)
        case "11-4" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 勤労感謝の日
        case "11-23" :
            $addDay ++ ;
            continue;
        # 勤労感謝の日(振り替え休日)
        case "11-24" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;
        # 天皇誕生日
        case "12-23" :
            $addDay ++ ;
            continue;
        # 天皇誕生日(振り替え休日)
        case "12-24" :
            # 月曜日
            switch (date("w", $temporary_expired_date )) {
                case "1" :
                    $addDay ++ ;
                    continue;
            }
            break;

        default :
            break;
    }
    break;
}

長いな・・

Twitter: @asahina_alice