プログラム初心者がPHPでカレンダーをつくってみました

f:id:nazuna_0124:20170306210455p:plain

できた・・・?



確認する限りでは出力はあってます


こんなかんじで表示したいのです。

f:id:nazuna_0124:20170309012704p:plain

ソースはこちら。習ったことだけを使って、ぐぐらない縛りです←

<?php

    $y ="2017";
    $m="5";

    $lastday=date("t",mktime(0,0,0,$m,1,$y));
    $weekday=date("w",mktime(0,0,0,$m,1,$y));

    $tbl = "";

    $tbl.='<table border="1">';

    $className="";


    //振替休日も祝日で登録してね。火曜日、水曜日が振替休日になる場合もあります。
    $holiday =[
    "2017/01/01"=>"元日",
    "2017/01/02"=>"振替休日",
    "2017/01/09"=>"成人の日",
    "2017/02/11"=>"建国記念の日",
    "2017/03/20"=>"春分の日",
    "2017/04/29"=>"昭和の日",
    "2017/05/03"=>"憲法記念日",
    "2017/05/04"=>"みどりの日",
    "2017/05/05"=>"こどもの日",
    "2017/07/17"=>"海の日",
    "2017/08/11"=>"山の日",
    "2017/09/18"=>"敬老の日",
    "2017/09/23"=>"秋分の日",
    "2017/10/09"=>"体育の日",
    "2017/11/03"=>"文化の日",
    "2017/11/23"=>"勤労感謝の日",
    "2017/12/23"=>"天皇誕生日",

];


    for ($i=1;$i<43;$i++){

        if ($i % 7 == 1){
            $tbl.= "<tr>";
            $className = 'class = "sunday"';
            }
        elseif($i % 7 == 0){
            $className = 'class ="saturday"';
        }else{
            $className='';
        }

        //祝日対応
        if(array_key_exists(date("Y/m/d",mktime(0,0,0,$m,$i - $weekday,2017)),$holiday)){
            $className='class = "sunday"';
        }


        $tbl.="<td>";

        if ($i <= $weekday || $i > $weekday + $lastday){
            $tbl.="&nbsp;";
            $tbl.= '<span style="color:gray">' . date("j",mktime(0,0,0,$m,$i - $weekday,2017)) . '</span>';

        }else{
            $tbl.="<span ${className}>" . ($i-$weekday) .'</span>';
        }

        if ($i % 7 == 0){
            $tbl.="</tr>";
        }
    }


    $tbl.="</table>";


    ?>


    <html>
    <head>

   <style>

    .sunday{
        color:red;
    }

    .saturday{
        color:blue;
    }

    table{
        text-align:center;
    }

    </style>
   </head>
    <body>

    <?php print date("Y年n月",mktime(0,0,0,$m,1,$y)) ?>
    <?php print tidy_repair_string($tbl) ?>
    <?php $tbl ?>

    </body>
    </html>

年月を引数で受け取って関数にすれば、たぶん使えなくも……。


なにかもっといいほうほうないかなー。


もしくはもうちょっと綺麗に書きたいものです。