<?php
//2020-01-01の変数
$MasterDate = date('Y-m-d',strtotime('2020-01-01'));
//曜日の配列化
$youbi = array(
"月",
"火",
"水",
"木",
"金",
"土",
"日"
);
echo "<table border='1'>";
//月のスタート位置カウント初期化
$count2 = 0;
for($i=0; $i<=11; $i++){
//月のカウント
$month = date('n',strtotime("$MasterDate +$i month"));
//月の日数を配列化
$MonthCount = array(date('t',strtotime("$MasterDate +$i month")));
//月の出力
echo "<tr><th colspan='7'>{$month}月</th></tr><tr>";
//曜日の出力
foreach($youbi as $val){
echo "<th>{$val}</th>";
}
echo "</tr><tr>";
//週の折り返しカウント
$count = 1;
//月のスタート位置設定※配列化しても良い
if($i == 0){
$c = -1;
} else if($i == 1){
$c = -4;
} else if($i == 2){
$c = -5;
} else if($i == 3){
$c = -1;
} else if($i == 4){
$c = -3;
} else if($i == 5){
$c = 1;
} else if($i == 6){
$c = -1;
} else if($i == 7){
$c = -4;
} else if($i == 8){
$c = 0;
} else if($i == 9){
$c = -2;
} else if($i == 10){
$c = -5;
} else if($i == 11){
$c = 0;
}
//日数の出力
for($c; $c<=$MonthCount[0]; $c++){
//月のスタート位置空テーブル出力
if($c <= 0 && $i == $count2){
echo "<td></td>";
}
//空の後、正規位置スタート
if($c >= 1){
echo "<td>{$c}</td>";
}
//週の折り返し
if($count == 7){
echo "</tr><tr>";
$count = 0;
}
//週の折り返しカウント
$count++;
}
//月のスタート位置カウント
$count2++;
}
echo "</table>";
オリジナルカレンダー書き方