첫째 주, 마지막 주에 비는 날짜는 저번 달, 다음 달 날짜로 채워야 하는 PHP 달력 코드 입니다.
<div>
<div>
<div>
<div>
<h4>달력</h4>
<h3>Program</h3>
</div>
</div>
<div class="calendar">
<dl>
<dt class="sun">일</dt>
<dt>월</dt>
<dt>화</dt>
<dt>수</dt>
<dt>목</dt>
<dt>금</dt>
<dt class="sat">토</dt>
</dl>
<?
$year = date('Y');
$month = date("m");
//$month = date("m",strtotime('2024-06-01')); 테스트 코드
$firstDayOfMonth = 1;//첫 날
$lastDayOfMonth = date("t",strtotime("$year-$month"));//마지막 날
$firstDayOfWeek = date('w',strtotime("$year-$month-01"));//첫날 요일(0~6)
$lastDayOfWeek = date('w',strtotime("$year-$month-$lastDayOfMonth"));//마지막 날 요일(0~6)
$lastDiff = 6-$lastDayOfWeek; //다음 달 날짜 표시 해야 될 수
$prev_last_day=date('t',strtotime("-1 month",strtotime("$year-$month-01")));//지난달 마지막 날
$prev_count = $prev_last_day - $firstDayOfWeek+1; //첫째 주 저번 달 날짜 표시
$totalCnt = $firstDayOfWeek+$lastDayOfMonth+$lastDiff;//첫째 주 표시 해야 할 수 + 이번 달 표시 해야 될 수 + 마지막 주 표시 해야 할 수
$day=1; // 이번 달 날짜 표시
$last_cnt = 1; //마지막 주 다음 달 날짜 표시
for($i=1;$i<=$totalCnt;$i++){
if($i<=$firstDayOfWeek){
if($i==1){
echo "<dl class=\"body\">";
}
echo "<dd class=\"block\"><em>{$prev_count}</em></dd>";
$prev_count++;
}else if($i>$lastDayOfMonth+$firstDayOfWeek){
echo "<dd class=\"block\"><em>{$last_cnt}</em></dd>";
$last_cnt++;
if($i==$totalCnt){
echo "</dl>";
}
}
else{
if(date("w", strtotime("$year-$month-$day")) == 0){//주 시작(일요일)
echo "<dl class=\"body\">";
}
echo "<dd><em>{$day}</em></dd>";
if(date("w", strtotime("$year-$month-$day")) == 6){// 주 종료(토요일)
echo "</dl>";
}
$day++;
}
}
?>
</div>
</div>
</div>