ツヨブログ

パティシエからエンジニアになったレアな人材スウィーツや料理、VBAやPHPやJAVA、ずっとやってるFXや株など、自身の知識や経験をアウトプットしていくブログ

プログラミング

カレンダーを作ってみた【PHP】独学する初心者向けのサンプルソースコード

更新日:

Hello! World!

プラグラマっぽい挨拶をしてみました(笑)

初心者向けに良いとされるカレンダーの作成のサンプルコードです


サイト作成の際に、画面のこの辺にカレンダーを入れてほしいという要望があります

実務では既製のものをコピペして、CSSの調整だけで終わる作業です


独学するには様々な関数と入れ子もあるので、九九の表よりも勉強になると思います

完成後のイメージ画像

phpで作成したカレンダー
<?php
	
	$yeah = date("Y");
	$month = date("m");

	$lastDay = date('j',mktime(0,0,0,$month + 1,0,$yeah)); 

	$aryWeek = ['日', '月', '火', '水', '木', '金', '土'];

	$calendar = [];
	$j = 0;
	$day = 0;

	for($i = 1; $i <$lastDay+1; $i++){
		$week = DATE('w',mktime(0,0,0,$month,$i,$yeah));
		
		if ($i===1){
			for($s = 1; $s <= $week; $s++){
				$calendar[$j][$day] = '';
				$day++;
			}
		}

		if($day === 7){
			$j++;
			$day = 0;
		}
		$calendar[$j][$day] = $i;
		$day++;

		if($i == $lastDay){
			for( $e = 1; $e <=6 -$week; $e++){
				$calendar[$j][$day] = '';
				$day++;
			}
		}
	}
?>

<style type="text/css">

table.calendar td.today{
	background-color:#fbffa3;
	font-weight:bold;
}

.calendar{
	width:50%;
}

.calendar th:first-of-type,.calendar td:first-of-type{
	background-color: #ffefef;
	color: #FF0000;
	font-weight: bold;
}

.calendar th:last-of-type,.calendar td:last-of-type{
	background-color:  #ededff;
	color: #0000FF;
	font-weight: bold;
}

.calendar th,.calendar td{
	padding: 8px;
	background-color: #FFF;
	text-align: center;
	border: 1px solid #CCC;
}


結構長いですね

変数に今月の要素を代入

	$yeah = date("Y");
	$month = date("m");

	$lastDay = date('j',mktime(0,0,0,$month + 1,0,$yeah)); 

	$aryWeek = ['日', '月', '火', '水', '木', '金', '土'];

月末日までを二次元配列に代入

	for($i = 1; $i <$lastDay+1; $i++){
		$week = DATE('w',mktime(0,0,0,$month,$i,$yeah));
		//ここで1日までの空欄を入れてます
		if ($i===1){
			for($s = 1; $s <= $week; $s++){
				$calendar[$j][$day] = '';
				$day++;
			}
		}
         //7日おきに次の行へ進みます
		if($day === 7){
			$j++;
			$day = 0;
		}
		$calendar[$j][$day] = $i;
		$day++;
         //月末日から後の空欄をいれてます
		if($i == $lastDay){
			for( $e = 1; $e <=6 -$week; $e++){
				$calendar[$j][$day] = '';
				$day++;
			}
		}
	}

htmlを書き出します

echo '<tr>';
     //1行目に曜日をセット
	foreach($aryWeek as $week){
	 echo "<th>{$week}</th>";
	}
    //今回は6行回します
	foreach($calendar as $date){
	 echo '<tr>';
         //日曜日から土曜日まで7列回してます
		foreach($date as $oneday){
	 	 if ($oneday == date('j')){
             //本日はcssで囲みます
			echo '<td class = "today">'.$oneday.'</td>';
		  }else{
			echo "<td>{$oneday}</td>";
		 }
		}
echo '</tr>';
	}

CSSで見た目を整えます

/* これが「.today」だとフォントしか反映されなかったんです*/
table.calendar td.today{
	background-color:#fbffa3;
	font-weight:bold;
}

.calendar{
	width:100%;
}

.calendar th:first-of-type,.calendar td:first-of-type{
	background-color: #ffefef;
	color: #FF0000;
	font-weight: bold;
}

.calendar th:last-of-type,.calendar td:last-of-type{
	background-color:  #ededff;
	color: #0000FF;
	font-weight: bold;
}

.calendar th,.calendar td{
	padding: 8px;
	background-color: #FFF;
	text-align: center;
	border: 1px solid #CCC;
}
二次元配列で作ったカレンダーの表

CSSを抜きにすると、上にある2次元のカレンダーの表が画面左上に出ると思います

このカレンダーの表を二次元配列で作成し、そのままHTMLに書き出すイメージです

-プログラミング

Copyright© ツヨブログ , 2021 All Rights Reserved Powered by STINGER.