コーディング カレンダーをPHPで作るよ

どうも、irisawaです。
今回のコーディングの授業では実習として、カレンダーを作成しました。

以下、内容です。

今回作ったカレンダーのお題は、以下の通りです。

  • セレクトボックスで選択された月のカレンダーを表示
  • 土曜日に青色、日曜日は赤色で表示
  • 今日の日付は、強調表示

実習を開始する前に、日付を処理する為の便利な関数を教えていただきました。

  • date() ローカルの日付をフォーマット文字列で書式化する。
  • checkdate() 引数の日付が妥当かどうかを返す。妥当であればtrue、そうでなければfalseを返す。
  • mktime() 指定された日付をunixのタイムスタンプで返す。例えば、2008年4月25日のunixタイムスタンプが欲しければmktime(0,0,0,4,25,2008)と指定する。他にも、2008年5月の最終日が知りたければmktime(0,0,0,5+1,0,2008)と指定する事で、mktime()が自動的に計算をして5月の最終日を返してくれる。

これらを踏まえた上で作成したカレンダーのコードは、以下になります。
ちなみに実行結果はこんな感じになります。

  pic1.png
【コード】

<?php

  //$to_monthはセレクトボックスで選択された月
  $day= 1;
  define("SUNDAY",0);
  define("SATURDAY",6);
while(true){
     //日付が不正なら終了
     if(!checkdate($to_month,$day,2008)){
        break;
     }
     echo "<tr>";
     for($i = 0; $i < 7; $i++){
        //日付が正しくなくても空文字で埋める
        if(!checkdate($to_month,$day,2008)){
          echo "<td> </td>";
     }else{
           //曜日を数値で取得
           $week = date("w",mktime(0,0,0,$to_month,$day,2008));
           if($week == $i){
               $color = "#000000";
               $class = "normal";
               if($week == SUNDAY){
                   $color = "#ff0000";
               }elseif($week == SATURDAY){
                   $color = "#0000ff";
               }
               //今日を入れる
               $today = date("j");
               if($day == $today && $to_month == date("n")){
                    $class = "bold";
               }
              printf("<td style='color:%s' class='%s'>%d</td>"
                         ,$color,$class,$day);
              $day++;
           }else{
             //対応した曜日でなければ空文字を入れる
             echo "<td> </td>";
           }
         }
     }
      echo "</tr>";
}

?>

日付関数については、特殊な使い方も出来るのでしっかりマスターしていこうと思います。
今回のコードでご指摘の部分等ありましたら、またコメントくださると嬉しいです。

3 件のコメント so far »

  1. by ゆどうふ, on 06.03.08 @ 8:49 PM

     

    コーディングルールは社内で統一したほうがいいので、たぶん先輩方に正しい方式を確認したほうがいいとは思いますが、気になった点!

    ===
    $day= 1;
    define(”SUNDAY”,0);
    define(”SATURDAY”,6);
    ===
    定数定義が変数定義より後に来るのはどうなのでしょうか。
    こだわる必要もないですが、定数定義を先にする癖をつけた方が有益かも、と感じます。

    ===
    while(true){
    //日付が不正なら終了
    if(!checkdate($to_month,$day,2008)){
    break;
    }
    ===

    ===
    while (checkdate($to_month, $day, 2008)) {
    ===
    で済むんじゃ。

    とかでした。

  2. by irisawa, on 06.06.08 @ 12:38 PM

     

    >ゆどうふさん
    返信遅れてしまい申し訳ありません。

    これからは、定数定義を変数定義より先にする癖をつけたいと思います。
    whileの条件も、教えていただいたコードの方が分かりやすいですね。

    コメントありがとうございました!

  3. by スタートアップ研修記 » コーディング カレンダーに予定表をつけてみる, on 06.06.08 @ 7:27 PM

     

    [...] どうも、irisawaです。 今日のコーディングは、この前の実習で作成したカレンダーに予定表を加えるという実習を行いました。 [...]

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree