25
2017-Dec
[php] 달력 구현 소스
작성자: Blonix
IP ADRESS: *.64.228.3 조회 수: 1859
출처 :: https://www.phpschool.com/link/tipntech/65572
-> 일부 php 문법 수정함
<?php
/********** 사용자 설정값 **********/
$startYear = date( "Y" );
$endYear = date( "Y" ) + 30;
/********** 입력값 **********/
$year = ( $_GET['toYear'] )? $_GET['toYear'] : date( "Y" );
$month = ( $_GET['toMonth'] )? $_GET['toMonth'] : date( "m" );
$doms = array( "일", "월", "화", "수", "목", "금", "토" );
/********** 계산값 **********/
$mktime = mktime( 0, 0, 0, $month, 1, $year ); // 입력된 값으로 년-월-01을 만든다
$days = date( "t", $mktime ); // 현재의 year와 month로 현재 달의 일수 구해오기
$startDay = date( "w", $mktime ); // 시작요일 알아내기
// 지난달 일수 구하기
$prevDayCount = date( "t", mktime( 0, 0, 0, $month, 0, $year ) ) - $startDay + 1;
$nowDayCount = 1; // 이번달 일자 카운팅
$nextDayCount = 1; // 다음달 일자 카운팅
// 이전, 다음 만들기
$prevYear = ( $month == 1 )? ( $year - 1 ) : $year;
$prevMonth = ( $month == 1 )? 12 : ( $month - 1 );
$nextYear = ( $month == 12 )? ( $year + 1 ) : $year;
$nextMonth = ( $month == 12 )? 1 : ( $month + 1 );
// 출력행 계산
$setRows = ceil( ( $startDay + $days ) / 7 );
?>
<center>
<table style="border-collapse:collapse;">
<form method="get">
<tr>
<td style="padding:10;border-width:1;border-style:solid;">
<select name="toYear" onchange="submit();">
<?php for( $i = $startYear; $i < $endYear; $i++ ){ ?>
<option value="<?php echo $i; ?>" <?php echo ($i==$year)?"selected":""; ?>><?php echo $i; ?></option>
<?php } ?>
</select>년
<select name="toMonth" onchange="submit();">
<?php for( $i = 1; $i <= 12; $i++ ) { ?>
<option value="<?php echo $i; ?>" <?php echo ($i==$month)?"selected":""; ?>><?php echo $i; ?></option>
<?php } ?>
</select>월
</td>
</tr>
</form>
</table>
<br>
<table style="border-collapse:collapse;">
<tr>
<td style="padding:10;border-width:1;border-style:solid;">
<input type="button" onclick="location.href='<?php echo $_SERVER['PHP_SELF']; ?>?toYear=<?php echo $prevYear; ?>&toMonth=<?php echo $prevMonth; ?>'" value=" << ">
<?php echo $year; ?>년 <?php echo $month; ?>월
<input type="button" onclick="location.href='<?php echo $_SERVER['PHP_SELF']; ?>?toYear=<?php echo $nextYear; ?>&toMonth=<?php echo $nextMonth; ?>'" value=" >> ">
</td>
</tr>
</table>
<br>
<table cellpadding=0 cellspacing=0 style="border-collapse:collapse;">
<tr>
<?php for( $i = 0; $i < count( $doms ); $i++ ) { ?>
<td align="center" style="padding:6;border-width:1;border-style:solid;"><?php echo $doms[$i]; ?>요일</td>
<?php } ?>
</tr>
<?php for( $rows = 0; $rows < $setRows; $rows++ ) { ?>
<tr>
<?php
for( $cols = 0; $cols < 7; $cols++ )
{
// 셀 인덱스 만들자
$cellIndex = ( 7 * $rows ) + $cols;
?>
<?php
// 이번달이라면
if ( $startDay <= $cellIndex && $nowDayCount <= $days ) { ?>
<td align="center" style="padding:6;border-width:1;border-style:solid;">
<?php if ( date( "w", mktime( 0, 0, 0, $month, $nowDayCount, $year ) ) == 6 ) { ?>
<b><font color="blue"><?php echo $nowDayCount++; ?></font></b>
<?php } else if ( date( "w", mktime( 0, 0, 0, $month, $nowDayCount, $year ) ) == 0 ) { ?>
<b><font color="red"><?php echo $nowDayCount++; ?></font></b>
<?php } else { ?>
<b><?php echo $nowDayCount++; ?></b>
<?php } ?>
</td>
<?php
// 이전달이라면
} else if ( $cellIndex < $startDay ) { ?>
<td align="center" style="padding:6;border-width:1;border-style:solid;">
<font color="gray"><b><?php echo $prevDayCount++; ?></b></font>
</td>
<?php
// 다음달 이라면
} else if ( $cellIndex >= $days ) { ?>
<td align="center" style="padding:6;border-width:1;border-style:solid;">
<font color="gray"><b><?php echo $nextDayCount++; ?></b></font>
</td>
<?php }
}
?>
</tr>
<?php } ?>
</table>
</center>
음력변환, 공휴일 소스는 아래에서 참고
제대로 된 공휴일 구현은 DB를 이용하는 수밖에...
https://www.phpschool.com/link/tipntech/35030