PHPカレンダー
▼スポンサードリンク
PHPでカレンダーを作るスクリプトを紹介します。カレンダーの使用用途として、日記や家計簿などで、日付を簡単に選ぶことができますね。
◆カレンダースクリプト
先ず、カレンダーのプログラムを以下に示します。
▼ダウンロード(右クリック⇒対象をファイルに保存し、txtをphpに名前変換する)
▼動作を試す
<?
//本日の日付を取得する
$time = time();
//各日付をセットする
$year = date("Y", $time);
$month = date("n", $time);
$day = date("j", $time);
//GETにきた年月をチェックする
$year2=@$_GET["year"];
$month2=@$_GET["month"];
$day2=@$_GET["day"];
//先月、来月をクリックした場合の処理
if($year2!="" || $month2!="" || $day2!=""){
if($year2!=""){
$year = $year2;
}
if($month2!=""){
$month = $month2;
}
if($day2!=""){
$day = $day2;
}
else{
$day = 1;
}
$time = mktime(0,0,0,$month,$day,$year);
}
//今月の日付の数
$num = date("t", $time);
//曜日を取得するために時間をセット
$today = mktime(0,0,0,$month,$day,$year);
//曜日の配列
$date = array('日','月','火','水','木','金','土');
//カレンダーを表示する
//先月の場合
if($month==1){
$year3 = $year-1;
$month3 = 12;
}
else{
$year3 = $year;
$month3 = $month-1;
}
//来月の場合
if($month==12){
$year4 = $year+1;
$month4 = 1;
}
else{
$year4 = $year;
$month4 = $month+1;
}
//カレンダーを表示するHTML
print "<table width=150><tr><td colspan=7>";
print "<center>
<a href=\"?year=$year3&month=$month3\">".$month3."月</a>";
print " ".$year."年".$month."月 ";
print "<a href=\"?year=$year4&month=$month4\">".$month4."月</a>
</td></tr>
";
print "
<tr>
<td><font color=red>日</font></td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td><font color=blue>土</font></td>
</tr>
";
//カレンダーの日付を作る
for($i=1;$i<=$num;$i++){
//本日の曜日を取得する
$print_today = mktime(0, 0, 0, $month, $i, $year);
//曜日は数値
$w = date("w", $print_today);
//一日目の曜日を取得する
if($i==1){
//一日目の曜日を提示するまでを繰り返し
print "<tr>";
for($j=1;$j<=$w;$j++){
print "<td></td>";
}
$data = check($i,$w,$year,$month,$day);
print "<td>$data</td>";
if($w==6){
print "</tr>";
}
}
//一日目以降の場合
else{
if($w==0){
print "<tr>";
}
$data = check($i,$w,$year,$month,$day);
print "<td>$data</td>";
if($w==6){
print "</tr>";
}
}
}
print "</table>";
//特定の日付の場合の処理
function check($i,$w,$year,$month,$day){
if($w==0){
$change = "<font color=red><a href=\"?year=$year
&month=$month&day=$i&write=on\" color=red>$i</a></font>";
}
elseif($w==6){
$change = "<font color=blue><a href=\"?year=$year
&month=$month&day=$i&write=on\">$i</a></font>";
}
else{
$change = "<a href=\"?year=$year&month=$month&day=$i
&write=on\">$i</a>";
}
return $change;
}
?> |
◆カレンダー作成の考え方
PHPでカレンダースクリプトを考える際の考え方を大まかに紹介します。
1.今月を把握する。
2.曜日と日付を照らし合わせる。
3.翌月と来月の処理を考える。
今後は上記のサンプルプログラムを元にして、紹介していきます。
▼スポンサードリンク
1.本日の情報を取得する
//本日の日付を取得する
$time = time();
//各日付をセットする
$year = date("Y", $time);
$month = date("n", $time);
$day = date("j", $time);
|
time()から本日の情報を取得し、本日の年月日を取得します。
2.別の月を表示したい場合
//GETにきた年月をチェックする
$year2=@$_GET["year"];
$month2=@$_GET["month"];
$day2=@$_GET["day"];
//先月、来月をクリックした場合の処理
if($year2!="" || $month2!="" || $day2!=""){
if($year2!=""){
$year = $year2;
}
if($month2!=""){
$month = $month2;
}
if($day2!=""){
$day = $day2;
}
else{
$day = 1;
}
$time = mktime(0,0,0,$month,$day,$year);
}
|
ここでは、カレンダーの先月、来月をクリックして、その月のカレンダーを表示するための処理になります。本日の年月日に上書きされます。一時的に日は1日になるように設定しています。
3.今月の日付の数を知る
//今月の日付の数
$num = date("t", $time);
|
カレンダーを表示する時には、日付の数が必要です。自動的にdateでは、うるう年も計算してくれるため、かなり便利ですね。
おまけとして、うるう年の計算として・・・
1.西暦が4で割り切れるとうるう年とする。
2.西暦が100で割り切れるとうるう年ではない。
3.更に西暦が400で割り切れると、うるう年にする。
これをプログラム化するだけですが、特にしなくても問題は発生しません。
4.日付と曜日を対応させる
//曜日の配列
$date = array('日','月','火','水','木','金','土');
|
上記の配列に対応する表として、その先にあるプログラムの中に、下記のプログラムがあります。
//本日の曜日を取得する
$print_today = mktime(0, 0, 0, $month, $i, $year);
//曜日は数値
$w = date("w", $print_today);
|
dateから、曜日を曜日に対応する表示に設定してくれます。例えば、1日が日曜なら0、3日が火曜なら2が$wに格納されます。その数字の結果を配列に照らし合わせて、$dateに曜日を対応させます。
5.先月と来月にも適用させる
//カレンダーを表示する
//先月の場合
if($month==1){
$year3 = $year-1;
$month3 = 12;
}
else{
$year3 = $year;
$month3 = $month-1;
}
//来月の場合
if($month==12){
$year4 = $year+1;
$month4 = 1;
}
else{
$year4 = $year;
$month4 = $month+1;
}
|
カレンダーを今月だけではなくて、先月以降も来月以降も対処できるように設定します。今月を基準として来月・先月に対応するため、永遠にカレンダーを作成することができます。先月が1月になると、その先月は12月になり去年となりますし、来月が12月になると、その来月は1月になりますし、来年となりますので、その処理は必要となります。
6.カレンダーの外枠を作成する
//カレンダーを表示するHTML
print "<table width=150><tr><td colspan=7>";
print "<center>
<a href=\"?year=$year3&month=$month3\">".$month3."月</a>";
print " ".$year."年".$month."月 ";
print "<a href=\"?year=$year4&month=$month4\">".$month4."月</a>
</td></tr>
";
|
カレンダーの外枠と、先月と今月と来月を表示するHTMLです。tableのサイズや背景などは別途変更してください。「先月」は「<<」、「今月」は「>>」に変更しても良いかと思います。
print "
<tr>
<td><font color=red>日</font></td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td><font color=blue>土</font></td>
</tr>
";
|
各曜日を設定します。土曜日の文字は水色に、日曜日の背景は赤色にしていますが、背景も土曜日は水色系、日曜日は赤色系に設定しても良いかと思います。
7.各日付に曜日を対応させる
//カレンダーの日付を作る
for($i=1;$i<=$num;$i++){
|
今月の曜日は1日目から、今月の日数分のnum日目まで繰り返して表示させる。
//本日の曜日を取得する
$print_today = mktime(0, 0, 0, $month, $i, $year);
//曜日は数値
$w = date("w", $print_today);
|
カレンダーの表示は、一日目の曜日を基準にして、そこから順番に曜日を表示させていく。
//一日目の曜日を取得する
if($i==1){
//一日目の曜日を提示するまでを繰り返し
print "<tr>";
for($j=1;$j<=$w;$j++){
print "<td></td>";
}
$data = check($i,$w,$year,$month,$day);
print "<td>$data</td>";
if($w==6){
print "</tr>";
}
}
|
一日目の場合は、概要の曜日まで(日曜から土曜へ走査する)は、空白をいれ、一日目が該当する曜日と一致した場合に、その曜日に一日目を表示させる。
//一日目以降の場合
else{
if($w==0){
print "<tr>";
}
$data = check($i,$w,$year,$month,$day);
print "<td>$data</td>";
if($w==6){
print "</tr>";
}
}
|
一日目以降の場合は、日曜の日付の場合は、先頭になるために、タグtdを開始し、土曜の日付の場合はタグtdを閉じます。これによって、一週間単位でカレンダーを表示することができます。タグtdにクラスなどを用いて、背景色などを整えて下さい。
関数checkは、その曜日のリンク先を作成する関数です。この作成された曜日のリンクをクリックすることにより、その曜日の詳細のHTMLを閲覧することができます(もちろんそのスクリプトは自分で書かないといけませんが・・・)。
8.日付のリンクを作成する
//特定の日付の場合の処理
function check($i,$w,$year,$month,$day){
if($w==0){
$change = "<font color=red><a href=\"?year=$year
&month=$month&day=$i&write=on\" color=red>$i</a></font>";
}
elseif($w==6){
$change = "<font color=blue><a href=\"?year=$year
&month=$month&day=$i&write=on\">$i</a></font>";
}
else{
$change = "<a href=\"?year=$year&month=$month&day=$i
&write=on\">$i</a>";
}
return $change;
}
|
特定の曜日の日付の場合の処理を行います。例えば、土曜日なら青色、日曜日なら赤色などです。日付をクリックすると、URLの?以降にその曜日を特徴付ける項目がつきますので、それでその曜日の情報を出すことができます。
まとめ
カレンダースクリプトの実行結果です。

以上でカレンダースクリプトが完成しました。
装飾などは上記のスクリプトに書いておりませんので、
最後に、タグtableにおいて、装飾を加えると良いでしょう。
TOPへ |