NOTICE

달력

Date : 2014.07.25 11:57 Category : Programming/PHP
<?
$currentMonth = empty($_GET['m']) ? date('m') : $_GET['m'];
$currentYear = empty($_GET['y']) ? date('Y') : $_GET['y'];

$prevYear = ($currentMonth - 1) < 1 ? $currentYear - 1 : $currentYear;
$prevMonth = ($currentMonth - 1) < 1 ? 12 : $currentMonth - 1;

$nextYear = ($currentMonth + 1) > 12 ? $currentYear + 1 : $currentYear;
$nextMonth = ($currentMonth + 1) > 12 ? 1 : $currentMonth + 1;

$TIMESTAMP = mktime(0, 0, 0, $currentMonth, 1, $currentYear);
$lastDay = date("t", $TIMESTAMP);
$thisMonth = getdate($TIMESTAMP);
$Start = $thisMonth['wday'];
$limit = $lastDay + $Start;
$fakeLimit = ($limit > 35) ? 42 : 35;
?>
우선 php 코드는 위와 같다.


<a href="<?=$_SERVER['PHP_SELF']?>?y=<?=$prevYear?>&m=<?=$prevMonth?>">이전 달</a>
<?=$currentYear?><?=$currentMonth?>
<a href="<?=$_SERVER['PHP_SELF']?>?y=<?=$nextYear?>&m=<?=$nextMonth?>">다음 달</a>

<table width="100%" cellpadding="0" cellspacing="0">
<?
for($i=0; $i<$fakeLimit; $i++) {
	echo (($i % 7) == 0) ? "<tr>" : "";
	echo (($i - $Start + 1) < 1 || ($i - $Start + 1) > $lastDay) ? "<td class='day'></td>" : "<td class='day'>".($i - $Start + 1)."</td>";
	echo (($i % 7) == 6) ? "</tr>" : "";
}
?>
</table>
위는 html 부분이다.


<style type="text/css">
table, tr, td { border:1px solid #cbd8eb; border-collapse:collapse; }
.day { font:bold 12px dotum; height:100px; vertical-align:top; text-align:left; }
</style>


스타일 부분은 직접 꾸며도 되니 괜히 넣은 것 같기도 하고...

최대한 다른 기능들은 배제한 채 만든 것이기에 코드가 꽤 간단한 달력이다.

사용법이야 뭐 그냥 갖다 쓰면 되는 것이고 php 부분에 보면 $fakeLimit이라는 부분이 있는데 이것은 마지막 날이 끝나면 td를 더 이상 그리지 않는다.

td를 그려야 이쁠 것 같아서 넣었다.

만약 td를 더 그릴 필요가 없다 싶으면 for문에 있는 $fakeLimit 대신에 $limit을 쓰면 된다.