예전 홈페이지에 있던 자료입니다.
php로 간단하게 달력을 출력하는 예제입니다.
[php]<?
# 윤년을 알려주는 함수입니다...
# 윤년인 경우 참을 리턴합니다.
function IsLeap($_y)
{
if(($_y % 4) == 0 && ($_y % 100) != 0 && ($_y % 400) == 0)
return TRUE;
return FALSE;
}
# 1년 1월 1일 부터 현재 달의 전날까지 계산합니다...
# 이번달의 첫번째 요일을 계산하기 위해 필요합니다.
function SumOfDay($_y, $_m)
{
$days = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if(IsLeap($_y))
++$days[2];
$pyear = $_y - 1;
$tdays = $pyear * 365 + ($pyear/4) - ($pyear/100) + ($pyear/400);
for($i=0; $i<$_m; ++$i)
$tdays += $days[$i];
++$tdays;
return $tdays;
}
# 달력을 화면에 출력하는 루틴입니다.
function DispCal($_y, $_m)
{
$days = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
# 윤년인경우 2월달의 날짜를 수정합니다.
if(IsLeap($y))
++$days[2];
# 총 날수와 첫째날의 요일을 계산합니다.
$tdays = SumOfDay($_y, $_m);
$ldate = $tdays % 7;
$HTML = "<table border=0 cellpadding=4 cellspacing=1
bgcolor=black style="font-size:9pt;">
$cnt = 1;
# 총 날수를 출력할때까지 반복합니다.
while($cnt <= $days[$_m])
{
$HTML .= "
for($i=0; $i<7; ++$i)
{
# 처음과 끝의 칸을 채우기 위한 부분입니다.
if(($cnt == 1 && $i != $ldate) || ($cnt > $days[$_m]))
{
$HTML .= "
width=1 height=1>
}
else
{
# 일반적인 날짜를 출력하는 부분입니다.
$HTML .= sprintf("
}
}
$HTML .= "
}
$HTML .= "";
echo($HTML);
}
# 입력값이 잘못되었거나 없을 경우 현재 달로 출력합니다.
if(empty($y) || empty($m) || $y < 1 || $y > 4000 || $m < 1 || $m > 12)
{
$t = getdate(time());
$y = $t[year];
$m = $t[mon];
}
# 화면에 출력합니다.
DispCal($y, $m);
?>[/php]