2025 June
1234567
891011121314
15161718192021
22232425262728
2930


時計

以前に学習した事がある、PHPでカレンダーを表の中に出力するコードを書いてみました。
phpでカレンダーを表現するのは有名なようで、検索するとコードそのものも出てきますが、
今回のは私が白紙の状態から、以前の学習を思い出しながら、独自に書きました。
書いたものを貼り付けたいと思います。
貼り付けようと思いましたが、コードをそのまま貼り付ければ、当然ブラウザはそれをコードと認識し、
コードの貼り付けになりません。
対処法として、"<"や">"を特殊文字で書くと良いです、が、これを手作業でやるのは困難です。
そこで正規表現を使い、"<"だけ"&lt;"に置換しました。具体的には以下のような方法です。


    <?php
    $str = "ここに特殊文字に置換したいコードを記入";
    print preg_replace('/</', '&lt;', $str);
    ?>
    
追記ーー
正規表現で置換してもいいのですが、"htmlspecialchars"で同じことをしている、
と気付き試したところ、むしろこちらの方がシングルクォーテーション ( ‘ )ダブルクォーテーション ( “ )
なども特殊文字に変えてくれるので良いです。具体的な方法は以下です。

    <?php
    $str = "ここに特殊文字に置換したいコードを記入";
    print htmlspecialchars($str, ENT_QUOTES);
    ?>
    
ーー

尚、date関数が取り扱える時間の範囲を調べたところphpのマニュアルに次のような記載があります。

“日付と時刻の情報は内部的には 64 ビット数値で保持されているので、 (負の年も含めて) 考え得る限りのあらゆる日付を扱うことができます。
扱える範囲は、過去およそ2920億年と未来の同じくらいの年です。”

ですが、数百年前または後のカレンダーが正しいかは不明です。
また同マニュアルより、二桁以下の年数を指定すると次の通りの仕様との事です。

“100未満の年は特別な扱いになります。年が0から69までの間だった場合、 2000を足した数になります。
また、年が70から99までの間だった場合、1900を足した数になります。”



        
                <?php
                $year_current =  date("Y");
                $month_name = date("F");
                print "<span id='now_year'>$year_current</span>" . " "."$month_name";
                ?>
                    
                <table border="1">
                
                <tr>
                    <th class="red">日</th>
                    <th>月</th>
                    <th>火</th>
                    <th>水</th>
                    <th>木</th>
                    <th>金</th>
                    <th class="blue">土</th>
                </tr><tr>
                    
                <?php
                
                $year =  date("Y");
                $month = date("n");
                $day = date("j");        
                $timestamp = mktime(0,0,0,$month,1,$year);        
                $week = date("w", $timestamp);
                $t = date("t",$timestamp);
                $timestamp_last = mktime(0,0,0,$month,$t,$year);
                $week_last = date("w", $timestamp_last);        
                $count = 0;
                
                for($i=0; $i<$week; $i++){
                    print "<td></td>";
                    $count++;
                }

                for($i=1; $i<=$t; $i++){
                    if($count==7){
                        print "</tr><tr>";
                        $count = 0;
                    }
                    if($day==$i) print "<td align='right' id='today'>$i</td>";
                    else if($count==0) print "<td align='right' class='red'>$i</td>";
                    else if($count==6) print "<td align='right' class='blue'>$i</td>";
                    else print "<td align='right'>$i</td>";
                    $count++;
                }

                for($i=0; $i<6-$week_last; $i++){
                    print "<td></td>";
                    $count++;
                }
                
                ?>

                </tr>

                </table>