こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHPでカレンダーを作成するにあたって(祝日)の出力

PHP初心者です。
勉強をかねて、PHPでカレンダーを作成しています。
カレンダー自体は作成できたと思うのですが、祝日も考慮したいので、どうコーディングすれば良いでしょうか?
カレンダーは下記のように作成致しました。

<html>
<head>
<title>カレンダー</title>

<link rel= "stylesheet" href="ookawa.css" type="text/css">
</head>
<body>
<table>
<th colspan="7"><font size="+1">
<?php echo date("Y"); ?>
<?php echo "/"; ?>
<?php echo date("m"); ?>
</font><font size="+1"></font></th>
<tr>
<td><font size="-1">日</font></td>
<td><font size="-1">月</font></td>
<td><font size="-1">火</font></td>
<td><font size="-1">水</font></td>
<td><font size="-1">木</font></td>
<td><font size="-1">金</font></td>
<td><font size="-1">土</font></td>
</tr>
<?php
//当月の1日の曜日
$startwday = date("w", mktime(0, 0, 0, date("n"), 1, date("Y")));

//当月の最後の曜日
$endmday = date("t");

//当月の1日までの空欄
for($i = 0 ; $i < $startwday ; $i++) {
if(($count % 7) == 0) {
echo "<tr>";
}
echo "<td> </td>";
$count++;
}
//●日付の書き込み
for($i = 1 ; $i <= $endmday ; $i++) {
if(($count % 7) == 0) {
echo "<tr>";
}
if($i == date("j")) {
//☆本日の場合、背景色を黄色にする☆
echo "<td bgcolor=\"FFFF00\">";
}
else {
echo "<td align=\"center\ bgcolor=\"FFFF00\">";
}
if(($count % 7) == 0) {
//☆日曜日の場合、文字色を赤色にする☆
echo "<font color=\"red\">";
}
elseif(($count % 7) == 6) {
//☆土曜日の場合、文字色を青色にする☆
echo "<font color=\"blue\">";
}
echo "$i";
if(($count % 7) == 0 or ($count % 7) == 6) {
echo "</font>";
}
echo "</td>";
$count++;
if(($count % 7) == 0) {
echo "</tr>\n";
}
}
//当月の最終日以降の空欄
for( ; ($count % 7) != 0 ; ) {
echo "<td> </td>";
$count++;
if(($count % 7) == 0) {
echo "</tr>\n";
}
}
?>
</table>
</body>
</html>

アドバイスを宜しくお願い致します。

投稿日時 - 2009-04-30 17:22:43

QNo.4921051

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

私が作ったときは、休日は別ファイルにして祝日を登録していました。
No.1さんも書いているように祝日は法律で変わるので、その度にプログラムを修正するよりは休日ファイルを作って、それを修正するようにしたほうが楽です。

それと、上のプログラムで抜けていると思うのは、
1.土曜日と祝日が重なった時の色の処理
2.日曜日と祝日が重なった時の振り替え処理

投稿日時 - 2009-04-30 19:04:20

補足

回答ありがとうございます。
早速申し訳ないのですが…。
休日は別ファイルにして祝日を登録というのは、具体的にどのようにやれば良いでしょうか?

又、上記のソースは知り合いのソースを参考にさせて頂いて作成した物なんですが、タグに関しても理解できていない部分があるのですが、上記のソースの echo "<tr>";    とあるのですが、echoはブラウザに表示させる命令だと思うのですが"<tr>";とは具体的に何をしているのでしょうか?
HTMLタグについてのサイトを見ているのですが、いまいちピントこないので、困っています…。

どうぞ宜しくお願い致します。

投稿日時 - 2009-05-01 16:54:26

ANo.2

自分自身が仕事で作ったときには祝日はテキストベースのデータファイルを作って管理した。
(ただし春分と秋分は計算ででるので計算させた)
祝日タイプとしては
・日付固定の物
・第○週の△曜日
ってタイプ
それと考慮するべきなのは
・日曜が祝日の場合の振り替え処理
(この場合、ゴールデンウィークのようなときには日曜日も月曜日も祝日だった場合には火曜日が振り替えになる処理)
・後は祝日に一日だけ挟まれた場合にはその中日は国民の祝になるんだっけ。(俺が作ったのはここの処理はやってない。)

投稿日時 - 2009-04-30 18:35:41

ANo.1

祝日なんて法律でちょくちょくかわるもんだし、手でメンテする
しかないでしょう。

過去未来10年ぶんくらいの祝日データを配列にいれておいて
in_array()あたりでチェックすればよいと思いますよ

投稿日時 - 2009-04-30 17:59:43

あなたにオススメの質問