달력에 일요일과 공휴일 표시를 하고싶습니다. 정보
달력에 일요일과 공휴일 표시를 하고싶습니다.관련링크
본문
신비나라님의 예전스킨을 사용하려 하고 있습니다.
사용중 달력을 사용하는 부분이 있는데... 일요일과 공휴일에는 클릭이 안되게 처리하고 싶습니다.
고수님들의 조언을 부탁드립니다.
달력부분에 사용되는 코드는 아래와 같습니다.
감사합니다.
<?
@header('Content-Type: text/html; charset=utf-8');
include_once("./_common.php");
if (!function_exists("get_first_day")) {
// mktime() 함수는 1970 ~ 2038년까지만 계산되므로 사용하지 않음
// 참고 : http://phpschool.com/bbs2/inc_view.html?id=3924&code=tnt2&start=0&mode=search&s_que=mktime&field=title&operator=and&period=all
function get_first_day($year, $month)
{
$day = 1;
$spacer = array(0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4);
$year = $year - ($month < 3);
$result = ($year + (int) ($year/4) - (int) ($year/100) + (int) ($year/400) + $spacer[$month-1] + $day) % 7;
return $result;
}
}
// 예약일 선택하면 넘어오는 지점
if ($_GET['param1'])
{
$hospitalFK = $_GET['param1'];
unset($param1);
}
if ($_GET['param2'])
{
$schedule_ym = $_GET['param2'];
unset($param2);
}
// 오늘
$today = getdate($g4[server_time]);
$year = (int)substr($schedule_ym, 0, 4);
$month = (int)substr($schedule_ym, 4, 2);
if ($year < 1) $year = $today[year];
if ($month < 1 || $month > 12) $month = $today[mon];
$current_ym = sprintf("%04d%02d", $year, $month);
$current_ym2 = sprintf("%04d-%02d", $year, $month);
$end_day = array(1=>31, 28, 31, 30 , 31, 30, 31, 31, 30 ,31 ,30, 31);
// 윤년 계산 부분이다. 4년에 한번꼴로 2월이 28일이 아닌 29일이 있다.
if( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 )
$end_day[2] = 29; // 조건에 적합할 경우 28을 29로 변경
// 해당월의 1일을 mktime으로 변경
$mktime = mktime(0,0,0,$month,1,$year);
$mkdate = getdate(strtotime(date("Y-m-1", $mktime)));
// 1일의 첫번째 요일 (0:일, 1:월 ... 6:토)
$first_day = get_first_day($year, $month);
// 해당월의 마지막 날짜,
$last_day = $end_day[$month];
if ($month - 1 < 1) {
$before_ym = sprintf("%04d%02d", ($year-1), 12);
$before_m = sprintf("%02d", 12);
} else {
$before_ym = sprintf("%04d%02d", $year, ($month-1));
$before_m = sprintf("%02d", $month-1);
}
if ($month + 1 > 12) {
$after_ym = sprintf("%04d%02d", ($year+1), 1);
$after_m = sprintf("%02d", 1);
} else {
$after_ym = sprintf("%04d%02d", $year, ($month+1));
$after_m = sprintf("%02d", $month+1);
}
?>
<table width="213" cellpadding="2" cellspacing="2" bgcolor="#ffffff">
<tr>
<td height="25" colspan="7" style="font-family:Trebuchet MS;color: #145DAA;" align="center" bgcolor="#ffffff">
<a href="#" onClick="calendarSelectMonth('<?=$before_ym?>');calendarListChange();" onfocus="blur();" style="font-family:Trebuchet MS;color: #C79DD9; font-weight:bold;"> <?=$before_m?></a> <B><?=$year?>/<?=$month?></B> <a href="#" onClick="calendarSelectMonth('<?=$after_ym?>');calendarListChange();" onfocus="blur();" style="font-family:Trebuchet MS;color: #C79DD9; font-weight:bold;"><?=$after_m?> </a></div></td>
</tr>
<tr>
<td align='center' bgcolor="#FFBBB4"><b>일</b></td>
<td align='center' bgcolor="#E9E9E9"><b>월</b></td>
<td align='center' bgcolor="#E9E9E9"><b>화</b></td>
<td align='center' bgcolor="#E9E9E9"><b>수</b></td>
<td align='center' bgcolor="#E9E9E9"><b>목</b></td>
<td align='center' bgcolor="#E9E9E9"><b>금</b></td>
<td align='center' bgcolor="#B0D5FF"><b>토</b></td>
</tr>
<?
$cnt = 0;
$day = 0;
for ($i=0; $i<6; $i++) {
echo "<tr>";
for ($k=0; $k<7; $k++) {
$cnt++;
// 오늘이라면
if ($today[year] == $year && $today[mon] == $month && $today[mday] == ($day+1))
{
$bgcolor = "#E8F3F9";
}
else {
// 올해
if ($today[year] == $year)
{
// 이번달이면
if ($today[mon] == $month)
{
// 오늘부터 마지막 날까지만 예약가능
if ($today[mday] <= ($day+1) && $last_day >= ($day+1))
{
$bgcolor = "#E1E5FF";
}
else $bgcolor = "#FFFFFF";
}
// 이번달 이후면 첫날부터 마지막 날까지
else if ($today[mon] < $month && $cnt > $first_day && ($day+1) <= $last_day)
{
$bgcolor = "#E1E5FF";
}
else
{
$bgcolor = "#FFFFFF";
}
}
// 올해 이후면 첫날부터 마지막 날까지
else if ($today[year] < $year && $cnt > $first_day && ($day+1) <= $last_day)
{
$bgcolor = "#E1E5FF";
}
else
{
$bgcolor = "#FFFFFF";
}
}
//if ($k == 0) $bgcolor = "#FFFFFF";
echo "<td bgcolor='{$bgcolor}' onClick='' align='center' height='20' style='font-family:Trebuchet MS;color: #000000;'>";
if ($cnt > $first_day) {
$day++;
if ($day <= $last_day) {
$current_ymd = $current_ym . sprintf("%02d", $day);
$current_ymd2 = $current_ym2 . "-" . sprintf("%02d", $day);
if ($bgcolor == "#E1E5FF") echo "<a href=\"javascript:calendarSelectDayDoctorConfirm('{$current_ymd2}');\">";
echo $day;
if ($bgcolor == "#E1E5FF") echo "</a>";
} else {
echo " ";
}
} else {
echo " ";
}
echo "</td>";
}
echo "</tr>\n";
if ($day >= $last_day)
break;
}
?>
</table>
</div>
사용중 달력을 사용하는 부분이 있는데... 일요일과 공휴일에는 클릭이 안되게 처리하고 싶습니다.
고수님들의 조언을 부탁드립니다.
달력부분에 사용되는 코드는 아래와 같습니다.
감사합니다.
<?
@header('Content-Type: text/html; charset=utf-8');
include_once("./_common.php");
if (!function_exists("get_first_day")) {
// mktime() 함수는 1970 ~ 2038년까지만 계산되므로 사용하지 않음
// 참고 : http://phpschool.com/bbs2/inc_view.html?id=3924&code=tnt2&start=0&mode=search&s_que=mktime&field=title&operator=and&period=all
function get_first_day($year, $month)
{
$day = 1;
$spacer = array(0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4);
$year = $year - ($month < 3);
$result = ($year + (int) ($year/4) - (int) ($year/100) + (int) ($year/400) + $spacer[$month-1] + $day) % 7;
return $result;
}
}
// 예약일 선택하면 넘어오는 지점
if ($_GET['param1'])
{
$hospitalFK = $_GET['param1'];
unset($param1);
}
if ($_GET['param2'])
{
$schedule_ym = $_GET['param2'];
unset($param2);
}
// 오늘
$today = getdate($g4[server_time]);
$year = (int)substr($schedule_ym, 0, 4);
$month = (int)substr($schedule_ym, 4, 2);
if ($year < 1) $year = $today[year];
if ($month < 1 || $month > 12) $month = $today[mon];
$current_ym = sprintf("%04d%02d", $year, $month);
$current_ym2 = sprintf("%04d-%02d", $year, $month);
$end_day = array(1=>31, 28, 31, 30 , 31, 30, 31, 31, 30 ,31 ,30, 31);
// 윤년 계산 부분이다. 4년에 한번꼴로 2월이 28일이 아닌 29일이 있다.
if( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 )
$end_day[2] = 29; // 조건에 적합할 경우 28을 29로 변경
// 해당월의 1일을 mktime으로 변경
$mktime = mktime(0,0,0,$month,1,$year);
$mkdate = getdate(strtotime(date("Y-m-1", $mktime)));
// 1일의 첫번째 요일 (0:일, 1:월 ... 6:토)
$first_day = get_first_day($year, $month);
// 해당월의 마지막 날짜,
$last_day = $end_day[$month];
if ($month - 1 < 1) {
$before_ym = sprintf("%04d%02d", ($year-1), 12);
$before_m = sprintf("%02d", 12);
} else {
$before_ym = sprintf("%04d%02d", $year, ($month-1));
$before_m = sprintf("%02d", $month-1);
}
if ($month + 1 > 12) {
$after_ym = sprintf("%04d%02d", ($year+1), 1);
$after_m = sprintf("%02d", 1);
} else {
$after_ym = sprintf("%04d%02d", $year, ($month+1));
$after_m = sprintf("%02d", $month+1);
}
?>
<table width="213" cellpadding="2" cellspacing="2" bgcolor="#ffffff">
<tr>
<td height="25" colspan="7" style="font-family:Trebuchet MS;color: #145DAA;" align="center" bgcolor="#ffffff">
<a href="#" onClick="calendarSelectMonth('<?=$before_ym?>');calendarListChange();" onfocus="blur();" style="font-family:Trebuchet MS;color: #C79DD9; font-weight:bold;"> <?=$before_m?></a> <B><?=$year?>/<?=$month?></B> <a href="#" onClick="calendarSelectMonth('<?=$after_ym?>');calendarListChange();" onfocus="blur();" style="font-family:Trebuchet MS;color: #C79DD9; font-weight:bold;"><?=$after_m?> </a></div></td>
</tr>
<tr>
<td align='center' bgcolor="#FFBBB4"><b>일</b></td>
<td align='center' bgcolor="#E9E9E9"><b>월</b></td>
<td align='center' bgcolor="#E9E9E9"><b>화</b></td>
<td align='center' bgcolor="#E9E9E9"><b>수</b></td>
<td align='center' bgcolor="#E9E9E9"><b>목</b></td>
<td align='center' bgcolor="#E9E9E9"><b>금</b></td>
<td align='center' bgcolor="#B0D5FF"><b>토</b></td>
</tr>
<?
$cnt = 0;
$day = 0;
for ($i=0; $i<6; $i++) {
echo "<tr>";
for ($k=0; $k<7; $k++) {
$cnt++;
// 오늘이라면
if ($today[year] == $year && $today[mon] == $month && $today[mday] == ($day+1))
{
$bgcolor = "#E8F3F9";
}
else {
// 올해
if ($today[year] == $year)
{
// 이번달이면
if ($today[mon] == $month)
{
// 오늘부터 마지막 날까지만 예약가능
if ($today[mday] <= ($day+1) && $last_day >= ($day+1))
{
$bgcolor = "#E1E5FF";
}
else $bgcolor = "#FFFFFF";
}
// 이번달 이후면 첫날부터 마지막 날까지
else if ($today[mon] < $month && $cnt > $first_day && ($day+1) <= $last_day)
{
$bgcolor = "#E1E5FF";
}
else
{
$bgcolor = "#FFFFFF";
}
}
// 올해 이후면 첫날부터 마지막 날까지
else if ($today[year] < $year && $cnt > $first_day && ($day+1) <= $last_day)
{
$bgcolor = "#E1E5FF";
}
else
{
$bgcolor = "#FFFFFF";
}
}
//if ($k == 0) $bgcolor = "#FFFFFF";
echo "<td bgcolor='{$bgcolor}' onClick='' align='center' height='20' style='font-family:Trebuchet MS;color: #000000;'>";
if ($cnt > $first_day) {
$day++;
if ($day <= $last_day) {
$current_ymd = $current_ym . sprintf("%02d", $day);
$current_ymd2 = $current_ym2 . "-" . sprintf("%02d", $day);
if ($bgcolor == "#E1E5FF") echo "<a href=\"javascript:calendarSelectDayDoctorConfirm('{$current_ymd2}');\">";
echo $day;
if ($bgcolor == "#E1E5FF") echo "</a>";
} else {
echo " ";
}
} else {
echo " ";
}
echo "</td>";
}
echo "</tr>\n";
if ($day >= $last_day)
break;
}
?>
</table>
</div>
댓글 전체
일단 공휴일은
for ($k=0; $k<7; $k++) {
$cnt++;
이부분에서 $k값이 0이면 일요일 입니다
공휴일은 따로 공휴일 파일을 만드시고 년월일을 비교해서 뽑으셔야 할 것 같습니다
for ($k=0; $k<7; $k++) {
$cnt++;
이부분에서 $k값이 0이면 일요일 입니다
공휴일은 따로 공휴일 파일을 만드시고 년월일을 비교해서 뽑으셔야 할 것 같습니다