date(format, timestamp)과 mktime(시, 분, 초, 월, 일, 년)을 조합하여 달력 페이지를 만드는데 사용할 수 있다.
주로 사용할 포맷은
date('F') - 월의 완전한 글자 표현 January, March, October
date('Y/m/d') - yyyy/mm/dd 날짜 표현
date('t', mktime(0, 0, 0, $month, 1, $year) - 해당 월의 마지막 날짜 28(29), 30, 31
date('w', mktime(0, 0, 0, month, $day, year) - 그 날짜의 요일 숫자 표현. 일요일(0)~토요일(6)
달의 날짜와 앞뒤 빈칸을 포함한 배열을 구하고, 이 배열을 테이블 모양으로 표현하면 된다.
// 매월 1일 앞에 빈 칸
$repeat_pre = date('w', mktime(0, 0, 0, $month, 1, $year));
// 매월 말일 뒤의 빈 칸
$last_day = date('t', mktime(0, 0, 0, $month, 1, $year));
$repeat_sur = 6 - date('w', mktime(0, 0, 0, $month, $last_day, $year));
// 날짜(cell) 배열 구성
$calendar = array_merge(array_fill(0, $repeat_pre, ''), range(1, $last_day), array_fill(0, $repeat_sur, ''));
// 테이블 표시
for ($i = 0, $length = count($calendar); $i < $length; $i++) {
if ($i == 0) {
echo '<tr>';
echo "<td>$calendar[$i]</td>";
} elseif ($i + 1 == $length) {
echo "<td>$calendar[$i]</td>";
echo '</tr>';
} elseif ($i % 7 == 0) {
echo '</tr>';
echo '<tr>';
echo "<td>$calendar[$i]</td>";
} else {
echo "<td>$calendar[$i]</td>";
}
}
// ul와 CSS로 테이블을 만들 수 있다.
// 줄바꿈은
// ul:nth-child(7n+1) { content: ""; display: block; clear: both }