달력 출력하기

@codemaru · January 12, 2007 · 4 min read

예전 홈페이지에 있던 자료입니다.
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 .= "\n";
for($i=0; $i<7; ++$i)
{
# 처음과 끝의 칸을 채우기 위한 부분입니다.
if(($cnt == 1 && $i != $ldate) || ($cnt > $days[$_m]))
{
$HTML .= "<img src=blank.gif
width=1 height=1>\n";
}
else
{
# 일반적인 날짜를 출력하는 부분입니다.
$HTML .= sprintf("%d", $cnt++);
}
}
$HTML .= "\n";
}
$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]

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중