どうも、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月の最終日を返してくれる。
これらを踏まえた上で作成したカレンダーのコードは、以下になります。
ちなみに実行結果はこんな感じになります。
<?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>";
}
?>
日付関数については、特殊な使い方も出来るのでしっかりマスターしていこうと思います。
今回のコードでご指摘の部分等ありましたら、またコメントくださると嬉しいです。


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)) {
===
で済むんじゃ。
とかでした。
by irisawa, on 06.06.08 @ 12:38 PM
>ゆどうふさん
返信遅れてしまい申し訳ありません。
これからは、定数定義を変数定義より先にする癖をつけたいと思います。
whileの条件も、教えていただいたコードの方が分かりやすいですね。
コメントありがとうございました!
by スタートアップ研修記 » コーディング カレンダーに予定表をつけてみる, on 06.06.08 @ 7:27 PM
[...] どうも、irisawaです。 今日のコーディングは、この前の実習で作成したカレンダーに予定表を加えるという実習を行いました。 [...]