본문 바로가기

개발/php

date()와 mktime() 활용한 calendar

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 }




반응형