PHPスクリプトでカレンダー作成(先月や来月も表示できるタイプ)

PHP初心者が誰もが通る道・・・・それが「カレンダー作成・・・」
なのかはわかりませんがw
プログラムの練習に作ってみました

今回作成したのは、「来月」や「先月」もボタンで切り替えれるタイプのカレンダー

普通に作ると「来月」や「前月」ボタンを押した時に
変数がリセットされるので、結局1ヶ月分先か1ヶ月後しか表示できないので
セッション変数($_SESSION)を使って変数が保てるようにします

$_POSTした時に[input type="hidden"]で
月($_SESSION['tuki'])と年($_SESSION['nen'])をセッション変数で年月を渡します

Notice: Undefined index: nen in /home/member/sitemix_55218/site/calendar_setumei.php on line 5

Notice: Use of undefined constant Y - assumed 'Y' in /home/member/sitemix_55218/site/calendar_setumei.php on line 6

Notice: Undefined index: tuki in /home/member/sitemix_55218/site/calendar_setumei.php on line 8

Notice: Use of undefined constant n - assumed 'n' in /home/member/sitemix_55218/site/calendar_setumei.php on line 9

Notice: Use of undefined constant Ynj - assumed 'Ynj' in /home/member/sitemix_55218/site/calendar_setumei.php on line 11

Notice: Use of undefined constant Y - assumed 'Y' in /home/member/sitemix_55218/site/calendar_setumei.php on line 12

Notice: Use of undefined constant n - assumed 'n' in /home/member/sitemix_55218/site/calendar_setumei.php on line 13

Notice: Use of undefined constant t - assumed 't' in /home/member/sitemix_55218/site/calendar_setumei.php on line 16
2018年5月
 123456
78910111213
14151617181920
21222324252627
28293031   

PHPカレンダープログラムの簡単な使い方
1. ページの最初に下記のプログラムを読み込んでおく
2. <?php calendar()?> で呼び出す


<?php
session_start();//ページの最初に呼び出す
function calendar(){
if($_SESSION["nen"] == ""){
$_SESSION["nen"] = date(Y);
}
if($_SESSION["tuki"] == ""){
$_SESSION["tuki"] = date(n);
}
$nowday = date(Ynj);// 今日の日付
$nen = date(Y);
$tuki = date(n);
//今月の初めの曜日//
$start_youbi = date("N", mktime(0, 0, 0,$tuki,1,$nen));
///↑↑date(N)は1が月曜日 7が日曜日(PHP 5.1から)↑↑///
$tuki_owari = date(t); // その月の終りの日数
/////////ココから←先月の処理/////////////
if(@$_POST['sengetu']){
//unixtimeスタンプが1970年からのため下の1行を加えとく
if($_SESSION["nen"]>=1970){
if($_SESSION["tuki"]==1){
$_SESSION["nen"]=$_SESSION["nen"]-1;
$_SESSION["tuki"] = 12;// 1月だったら、年を1減らして12月にする
$start_youbi =
date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
$tuki_owari =
date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
}else{ //以下は 1月以外の処理
$_SESSION["tuki"]=$_SESSION["tuki"]-1;
$start_youbi =
date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
$tuki_owari =
date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
}
}
}
/////////ココから来月→の処理////////////
if(@$_POST['raigetu']){
if($_SESSION["tuki"]==12){
$_SESSION["nen"]=$_SESSION["nen"]+1;
$_SESSION["tuki"] = 1; //12月だったら1月にして年を1増やす
$start_youbi =
date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
$tuki_owari =
date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
}else{ //以下は12月以外の処理
$_SESSION["tuki"]=$_SESSION["tuki"]+1;
$start_youbi =
date("N", mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
$tuki_owari =
date("t",mktime(0, 0, 0,$_SESSION["tuki"],1, $_SESSION["nen"]));
}
}
//////////////フォーム部分///////////////////////
echo<<<EOT
<form action="" method="post">
<input type="submit" name="sengetu" value="<<">
<input type="hidden" name="nen" value="{$_SESSION["nen"]}">
<input type="hidden" name="tuki" value="{$_SESSION["tuki"]}">
{$_SESSION["nen"]}年{$_SESSION["tuki"]}月
<input type="submit" name="raigetu" value=">>">
</form>
<table class="calendar">
<tr><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th>
<th class="doyoubi">土</font></th>
<th class="nitiyoubi">日</font></th></tr>
<tr>
EOT;
$cnt = 1;
$orikaesi =0;
if($start_youbi != 1){//月曜始まりでなければ空セル発射!
for($i=2 ; $i<=$start_youbi ; $i++){
echo "<td>&nbsp;</td>";
$orikaesi++;
}
}
while($cnt<=$tuki_owari){
if($nowday==$_SESSION["nen"].$_SESSION["tuki"].$cnt){
$td="honjitu";//本日の色
}elseif($orikaesi == 5){
$td= "doyoubi";//土曜日の色
}elseif($orikaesi == 6){
$td= "nitiyoubi";//日曜日の色
}else{
$td = "heijitu";//平日の色
}
echo '<td class="'.$td.'">'.$cnt.'</td>';
$cnt++;
$orikaesi++;
if(($orikaesi ==7)&&($tuki_owari != $cnt-1)){
echo "</tr><tr>";//折り返し
$orikaesi =0;//折り返しカウンタリセット
}
}
if($orikaesi!=0){//日曜終りでなければ空セル発射
while($orikaesi<7){
echo "<td>&nbsp;</td>";
$orikaesi++;
}
}
echo "</tr>";
echo "</table>";
}
?>

Notice: Undefined offset: 119 in /home/member/sitemix_55218/site/calendar_setumei.php on line 111

PHPカレンダープログラムの説明

まずセッションを使っているためページの先頭にこのプログラムを読み込む必要があります

カレンダーを関数にしている理由は
session_start()をページはじめに読ませるためです

関数にしとかないとページの一番上にしかカレンダーを表示できないプログラムになるからです

カレンダーの使い方は、カレンダーを呼び出したい所で <?php calendar() ?>と記述します

calender()ではなく、calendar()です
最後に;(セミコロン)は必要ありません

CSSは以下のようになります。名前をcalendar.cssなどにして
<link rel="stylesheet" type="text/css" href="calendar.css">
などとして読み込んでおきます



CSSの部分
<style>
.calendar{
width :180px;
height :180px;
border: 1px #000000 solid;
text-align : center;
border-collapse:collapse;
}
.calendar th{
border: 1px #4F5450 solid;
background-color : lightgray;
}
.calendar td{
border: 1px #4F5450 solid;
}
.honjitu {
background-color : yellow;
}
.doyoubi {
color : blue;
background-color:#ABD2FF
}
.nitiyoubi {
color : red;
background-color:#FFC7CB
}
.heijitu {
color : black;
}
</style>

Notice: Undefined offset: 30 in /home/member/sitemix_55218/site/calendar_setumei.php on line 106

上記のPHPカレンダープログラムについて・・・・
ソースを貼り付ける際に不具合が会ったようで
うまく作動しなかったみたいです
ごめんなさい
修正しました(2012.4.13)

月終りの日が折り返しとぴったりの場合に</tr><tr>が echoされて
テーブルの最後のボーダーが表示されない不具合を修正(2013.3.29)

休日、祝日付きのカレンダーを作りたいかたはこちらをご覧下さい

F5キーなどでカレンダーが更新されるのがいやな場合はJavascriptを使用します

詳しくはJavascriptのページをご覧下さい