シンプルなカレンダーです。
作っていく流れは
- 必要なデータの準備
- 日付を配列にする
- データを整形
- スタイルシートの用意
- html部分を整形し完成
です。
サンプル
1.必要なデータの準備
まずカレンダーに必要なデータを用意します。
- 表示する年
- 表示する月
- 月末の日付
- 月初めの曜日
- 月末の曜日
- 曜日の配列
$y=date("Y",time());//現在の年
$m=date("m",time());//現在の月
$t=date("t",mktime(0,0,0,$m,1,$y));//月末の日付
$start=date("w",mktime(0,0,0,$m,1,$y));//月初めの曜日
$end=date("w",mktime(0,0,0,$m,$t,$y));//月末の曜日
$week=array("日","月","火","水","木","金","土");//曜日の表示
$date=$y."/".$m;//表示する年月
2.日付を配列にする
次にfor文を使い日付を配列にしていきます。
処理は
- $tblを初期化
- $startの個数分$tbl配列に空白を挿入
- 月末の日付まで$tbl配列に日付を挿入
- $endから週末になるまで$tbl配列に空白を挿入
となります。
$tbl="";
for($i=0;$i<$start;$i++){//1日までの空白 $tbl[]="-"; } for($i=1;$i<=$t;$i++){//日付 $tbl[]=$i; } for($i=$end;$i<6;$i++){//月末からの空白 $tbl[]="-"; }
3.データを整形
次に$tbl配列に入った今月の日付データを整形します。
日付部分のforeach文でループ処理は
- 変数$iを0で初期化
- $iが7で割り切れるとき($i%7==0)<tr>を追加
- 日付を追加し$iを+1する
- $iが7で割り切れるとき($i%7==0)</tr>を追加
となります。
$table="
<div class="\"ttl\"">".$date."</div>
\n";//年月の書き出し
$table.="
";
foreach($week as $val){//曜日の書き出し
$table.= "
\n";
}
$table.="
\n";
$i=0;
foreach($tbl as $val){
if($i%7==0){//週の始まり
$table.="
\n";
}
$table.="
\n";
$i++;
if($i%7==0){//週の終わり
$table.="
\n";
}
}
$table.="
<table>
<tbody>
<tr>
<th>".$val."</th>
</tr>
<tr>
<td>".$val."</td>
</tr>
</tbody>
</table>
\n";
4.スタイルシートの用意
必要部分のスタイルを記入し1.cssで保存します。
#main{
width:350px;
}
table{
border: 1px solid #ccc;
}
.ttl{
background: #999;
color: #fff;
border: 1px solid #ccc;
text-align:center;
height:1.5em;
line-height:1.5em;
}
th{
border: 1px solid #ccc;
background: #ccc;
color: #fff;
font-weight: normal;
padding: 2px;
}
td{
border: 1px solid #ccc;
text-align: center;
width: 50px;
height:50px;
vertical-align: top;
}
5.html部分を整形し完成
<div id="main"><!--?php echo $table; ?--></div>
全体のソース
<!--?php
//今月のカレンダー
$y=date("Y",time());//現在の年
$m=date("m",time());//現在の月
$t=date("t",mktime(0,0,0,$m,1,$y));//月初めの曜日
$start=date("w",mktime(0,0,0,$m,1,$y));//月初めの曜日
$end=date("w",mktime(0,0,0,$m,$t,$y));//月末の曜日
$week=array("日","月","火","水","木","金","土");//曜日の表示
$date=$y."/".$m;//表示する年月
$tbl="";
for($i=0;$i<$start;$i++){//1日までの空白
$tbl[]="-";
}
for($i=1;$i<=$t;$i++){//日付
$tbl[]=$i;
}
for($i=$end;$i<6;$i++){//月末からの空白
$tbl[]="-";
}
$table="
<div class=\"ttl\"-->".$date."
\n";//年月の書き出し
$table.="
";
foreach($week as $val){//曜日の書き出し
$table.= "
\n";
}
$table.="
\n";
$i=0;
foreach($tbl as $val){
if($i%7==0){//週の始まり
$table.="
\n";
}
$table.="
\n";
$i++;
if($i%7==0){//週の終わり
$table.="
\n";
}
}
$table.="
<table>
<tbody>
<tr>
<th>".$val."</th>
</tr>
<tr>
<td>".$val."</td>
</tr>
</tbody>
</table>
\n";
?>
<div id="main"><!--?php echo $table; ?--></div>