| 제목 | 고영창님의 만세력 | ||
|---|---|---|---|
| 글쓴이 | darkninja | 작성시각 | 2023/01/10 11:04:17 | 
|  | |||
| 아직 구정은 멀었지만 초보분들에게 유용했으면 하는? 설날 선물입니다 (제가 코딩한 달력소스는 오류가 있을수 있습니다, 소스를 완전히 이해하고 만든게 아니라서) 내일부터는 여태 미뤄둔 본업인 서툰 농사일을 시작해야 하기에 ci 공부는 다음에 또 ... 
 도움 받은 곳 https://link2me.tistory.com/1545 http://oops.org/project/manse/ http://www.responsivegridsystem.com/calculator/ http://afnmp3.homeip.net/~kohyc/calendar/index.cgi 소스 구하는 곳 https://github.com/OOPS-ORG-PHP/Lunar Lunar.php * import myException class http://pear.oops.org/package/myException https://github.com/OOPS-ORG-PHP/myException/ 
 
<!DOCTYPE html>
<head>
	<title>태양태음력</title>
<style>
p { 
	margin: 2px 0px 2px 0px; 
    padding:3px;
}
textarea {
    border:1px solid #999999;
    margin: 0px 0px 0px 0px;
    padding:3px;
}
.span1_7,
.span2_7,
.span3_7,
.span4_7,
.span5_7,
.span6_7,
.span7_7 {
	margin:0;clear:none;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;*behavior:url(boxsizing.htc)
}
.span1_12,
.span2_12,
.span3_12,
.span4_12, 
.span5_12, 
.span6_12, 
.span7_12, 
.span8_12, 
.span9_12, 
.span10_12,
.span11_12,
.span12_12 {
	margin:0;clear:none;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;*behavior:url(boxsizing.htc)
}
.span1_7 { width: 14.28%; }
.span2_7 { width: 28.57%; }
.span3_7 { width: 42.85%; }
.span4_7 { width: 57.14%; }
.span5_7 { width: 71.42%; }
.span6_7 { width: 85.71%; }
.span7_7 { width: 100%; }
.span1_12 {	width: 8.333%; }
.span2_12 {	width: 16.66%; }
.span3_12 {	width: 25%; }
.span4_12 {	width: 33.33%; }
.span5_12 {	width: 41.66%; }
.span6_12 {	width: 50%; }
.span7_12 {	width: 58.33%; }
.span8_12 {	width: 66.66%; }
.span9_12 {	width: 75%; }
.span10_12 { width: 83.33%; }
.span11_12 { width: 91.66%; }
.span12_12 { width: 100%; }
/*  SECTIONS  */
.section {
	clear: both;
	padding: 0px;
    margin-top: 0px;
    margin-left: 0px;	
    margin-right: 0px;
    margin-bottom: 0px;
}
/*  COLUMN SETUP top, right, bottom, left */
.section .col {
	display: block;
	float:left;
	margin: 0;
    padding-top: 8px;
    padding-left: 6px;	
    padding-right: 0px;
    padding-bottom: 0px;
	border: 1px solid #aaa;
	line-height: 115%;
}
.col:first-child { margin-left: 0; }
/*  GROUPING  */
.group:before,
.group:after { content:""; display:table; }
.group:after { clear:both;}
.group { zoom:1; /* For IE 6/7 */ }
/*  GO FULL WIDTH BELOW 480 PIXELS */
@media only screen and (max-width: 480px) {
	.col {  margin: 0 0 0 0; }
	.span1_7, .span2_7, .span3_7, .span4_7, .span5_7, .span6_7, .span7_7 { width: 100%; }
    .span1_12, .span2_12, .span3_12, .span4_12, .span5_12, .span6_12, .span7_12, .span8_12, .span9_12, .span10_12, .span11_12, .span12_12 {	width: 100%; }
}
.calendar-title {
	background-color : #7799AA;
}	
.col.week {
	background-color: #2579cf;
}
.days-info.active {
	background-color : #BBEEFF;
}	
.days-info.smallmoon {
	background-color : #EEFFAA;
}	
		
.days-info.largemoon {
	background-color : #FFFF99;
}	
.days-info.season24 {
	background-color : #AA99FF;
}	
.schedule_form_div.active {
	background-color : #BBEEFF;
}
.schedule_check_div.active {
	background-color : #99AACC;
}
.weekscheck_div.active {
	background-color : #99AACC;
}
font.calendar  {font-family: tahoma; font-size: 22px; color: #ffffff; }
font.week      {font-family: tahoma; font-size: 12pt; color: #ffffff; }
font.holy      {font-family: tahoma; font-size: 25px; color: #CC1133; } /*ff6c21*/
font.black     {font-family: tahoma; font-size: 25px; color: #000000; }
font.blue      {font-family: tahoma; font-size: 25px; color: #0000ff; }
font.gray      {font-family: tahoma; font-size: 15px; color: #bbbbbb; }
font.su28      {font-family: tahoma; font-size: 14px; color: #424242; }
font.lunarday  {font-family: tahoma; font-size: 14px; color: #0000bb; }
font.gangi     {font-family: tahoma; font-size: 14px; color: #424242; }
font.holiname  {font-family: tahoma; font-size: 14px; color: #ff0000; }
font.season24s {font-family: tahoma; font-size: 14px; color: #0000ff; }
font.schedule  {font-family: tahoma; font-size: 14px; color: #0000ff; }
font.memorial  {font-family: tahoma; font-size: 14px; color: #0000ff; }
</style>
</head>
<body>
<?php
	//도움 받은 곳
    //https://link2me.tistory.com/1545
	//http://oops.org/project/manse/
	//http://www.responsivegridsystem.com/calculator/
	//http://afnmp3.homeip.net/~kohyc/calendar/index.cgi
	//소스 구하는 곳
    //https://github.com/OOPS-ORG-PHP/Lunar
    //Lunar.php * import myException class
    //http://pear.oops.org/package/myException
	//https://github.com/OOPS-ORG-PHP/myException/
	require_once 'Lunar.php';
	$lunar = new oops\Lunar();
	function ErrorMsg($msg) 
	{
		echo " <script>window.alert('$msg');history.go(-1);</script>";
		exit;
	}
	function tolunar($cdate, $c=false) 
	{
		global $lunar;
		
		$o = $lunar->tolunar($cdate);
		
		if ($c)
			return $o->year.'-'.$o->month.'-'.$o->day;
		else	
			return $o;
	}
	function tosolar($cdate, $c=false) 
	{
		global $lunar;
		
		$o = $lunar->tosolar($cdate);
		
		if ($c)
			return $o->year.'-'.$o->month.'-'.$o->day;
		else	
			return $o;
	}
	// 앙력 날짜의 요일을 리턴 일요일 0 토요일 6
	function isweekend($cdate)
	{
		//$time = mktime(0, 0, 0, $month, $day, $year);
		//$weekday = date('w', $time);
		//return $weekday; //($weekday == 0 || $weekday == 6);
		return date("w", strtotime($cdate));
	}
		//---- 오늘 날짜
		date_default_timezone_set('Asia/Seoul');
		$thisyear = date('Y'); // 4자리 연도
		$thismonth = date('n'); // 0을 포함하지 않는 월
		$today = date('j'); // 0을 포함하지 않는 일
// $year, $month 값이 없으면 현재 날짜
$year = isset($_GET['year']) ? $_GET['year'] : $thisyear;
$month = isset($_GET['month']) ? $_GET['month'] : $thismonth;
$day = isset($_GET['day']) ? $_GET['day'] : $today;
		if ( $year < -2000 ) {
			$year = -2000;
			$ErrorMsg("-2000년 이전은 웹에서 사용하는 것을 권장하지 않음.");
		}	
		else if ( $year > 2300 ) {
			$year = 2300;
			$ErrorMsg("2300년 이후는 웹에서 사용하는 것을 권장하지 않음.");
		}
		// 1391-02-05 ~ 2050-12-31 까지는 KASI data로 처리를 한다.
	   /*
		* Lunar 1.0.0에서는 is_leap method가 연도만으로 율리우스력
		* 판단을 하지 않으며로 아래과 같이 조건을 체크해야 한다.
		* if ( $lunar->is_leap ($year, $year < 1583 ? true : false) )
		* Lunar 1.0.1 부터는 2번째 인자가 없어도, 연도만으로
		* 율리우스력 판단을 한다.
		*/
		$lastdayofmonth = array (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		if ( $lunar->is_leap($year) )
			$lastdayofmonth[2] = 29;
		
		// 해당월의 총일수 구하기
		$lastday = $lastdayofmonth[(int) $month];
		//$lastday = date('t', mktime(0, 0, 0, $month, 1, $year)); 
		$scheduledays = array();
		$schedule_empty = array(
			'id' => '',
			'subject' => '',
			'contents' => '',
			'time' => '',
			'repeat' => 'once',
			'type' => 'none',
			'alarm' => 'none',
			'schedule_lunar' => 'solar',
			'schedule_month' => 0,
			'schedule_day' => 0,
			'schedule_check' => 0,
			'weekday' => 'none',
			'weeksdate' => 'none',
			'weeksmonth' => 0,
			'weekscheck' => 0,
			'start_date' => '',
			'end_date' => '',
		);	
		$schedule_11 = array(
			'id' => '',
			'subject' => '설날',
			'contents' => '설날 새로운 일정을 입력하세요',
			'time' => '',
			'repeat' => 'once',
			'type' => 'day',
			'alarm' => 'none',
			'schedule_lunar' => 'solar',
			'schedule_month' => 1,
			'schedule_day' => 1,
			'schedule_check' => 1,
			'weekday' => 'none',
			'weeksdate' => 'none',
			'weeksmonth' => 0,
			'weekscheck' => 0,
			'start_date' => '2023-01-1',
			'end_date' => '2023-01-1',
		);	
		$schedule_122 = array(
			'id' => '',
			'subject' => '진짜 설날',
			'contents' => '진짜 설날 새로운 일정을 입력하세요',
			'time' => '',
			'repeat' => 'once',
			'type' => 'day',
			'alarm' => 'none',
			'schedule_lunar' => 'solar',
			'schedule_month' => 1,
			'schedule_day' => 22,
			'schedule_check' => 1,
			'weekday' => 'none',
			'weeksdate' => 'none',
			'weeksmonth' => 0,
			'weekscheck' => 0,
			'start_date' => '2023-01-21',
			'end_date' => '2023-01-24',
		);	
		$holidays = array();
		$holidays[1][1] = '신정';
		$holidays[3][1] = '삼일절';
		$holidays[5][5] = '어린이날';
		$holidays[6][6] = '현충일';
		$holidays[8][15] = '광복절';
		$holidays[10][3] = '개천절';
		$holidays[10][9] = '한글날';
		$holidays[12][25] = '성탄절';
		$o = tosolar($year."-1-1");
		$t1 = strtotime($o->year.'-'.$o->month.'-'.$o->day) - (3600 * 24);
		$t2 = strtotime($o->year.'-'.$o->month.'-'.$o->day);
		$t3 = strtotime($o->year.'-'.$o->month.'-'.$o->day) + (3600 * 24);
		$holidays[date("n", $t1)][date("j", $t1)] = '';
		$holidays[date("n", $t2)][date("j", $t2)] = '설날';
		$holidays[date("n", $t3)][date("j", $t3)] = '';
		
		$o = tosolar($year."-4-8");
		$t = strtotime($o->year.'-'.$o->month.'-'.$o->day);
		$holidays[date("n", $t)][date("j", $t)] = '석가탄신일';
		
		$o = tosolar($year."-8-15");
		$t1 = strtotime($o->year.'-'.$o->month.'-'.$o->day) - (3600 * 24);
		$t2 = strtotime($o->year.'-'.$o->month.'-'.$o->day);
		$t3 = strtotime($o->year.'-'.$o->month.'-'.$o->day) + (3600 * 24);
		$holidays[date("n", $t1)][date("j", $t1)] = '';
		$holidays[date("n", $t2)][date("j", $t2)] = '추석';
		$holidays[date("n", $t3)][date("j", $t3)] = '';
		// 설날 대체공휴일 검사
		if ((isweekend(tosolar($year."-1-1", true)) == 0) || 
            (isweekend(tosolar($year."-1-1", true)) == 6) ||
		    (isweekend(tosolar($year."-1-2", true)) == 0)) 
		{
			$o = tosolar($year."-1-3");
			$holidays[$o->month][$o->day] = '대체공휴일';
		}	
		// 어린이날 대체공휴일 검사 : 어린이날은 토요일, 일요일인 경우 그 다음 평일을 대체공유일로 지정
		if (isweekend($year."-5-5") == 0) {
			$holidays[5][6] = '대체공휴일';
		}	
		if (isweekend($year."-5-5") == 6) {
			$holidays[5][7] = '대체공휴일';
		}	
		// 추석 대체공휴일 검사
		if ((isweekend(tosolar($year."-8-14", true)) == 0) || 
            (isweekend(tosolar($year."-8-15", true)) == 0) ||
		    (isweekend(tosolar($year."-8-16", true)) == 0)) 
		{
			$o = tosolar($year."-8-17");
			$holidays[$o->month][$o->day] = '대체공휴일';
		}	
		$memorialdays = array();
		$memorialdays[1][8] = '쉬는날';
		$memorialdays[1][15] = '노는날';
		//echo "<xmp>";
		//var_dump($season);
		//echo "</xmp>";
		$cyear = $year;
		$cmonth = $month;
		$cday = 1;
		$cdate = $cyear.'-'.$cmonth.'-'.$cday;
		$season = $lunar->seasondate ($cdate);
		$tune_day = $lunar->dayfortune($cdate);
		$fday = $lunar->tolunar($cdate);
		$lyear = $fday->year;
		$lmonth = $fday->month;
		$lday = $fday->day;
		
		$ly = array();
		$lm = array();
		$ld = array();
		$l28su = array();
		$y_liljin = array();
		$m_liljin = array();
		$d_liljin = array();
		$largemonth = array();
		$s28day = '';
		
		for ( $i=0; $i<$lastday; $i++ ) {
			$chk = false;
            //음력날짜 lyear, lmonth, lday
			if ( $fday->largemonth ) {
				if ( $lday > 30 ) {
					$lmonth = preg_replace ('/[^0-9]/', '', $fday->month);
					$lmonth ++;
					if ( $lmonth > 12 ) {
						$lyear ++;
						$lmonth -= 12;
					}	
					$lday -= 30;
					$chk = true;
				}
			} else {
				if ( $lday > 29 ) {
					$lmonth = preg_replace ('/[^0-9]/', '', $fday->month);
					$lmonth ++;
					if ( $lmonth > 12 ) {
						$lyear ++;
						$lmonth -= 12;
					}	
					$lday -= 29;
					$chk = true;
				}
			}
			//양력날짜 cyear, cmonth, cday
			if ( ($i + 1) > $lastdayofmonth[(int) $cmonth] ) {
				$cmonth = $cmonth + 1;
				if ($cmonth == 13) {
					$cmonth = 1;
					$cyear = $cyear + 1;
				}	
				$cday = ($i + 1) - $lastdayofmonth[$cmonth];
			} else {
				$cday = $i + 1;
			}
			$cdate = str_pad($cyear,4,"0",STR_PAD_LEFT)."-".str_pad($cmonth,2,"0",STR_PAD_LEFT)."-".str_pad($cday,2,"0",STR_PAD_LEFT);
			//read schedule data
			//$scheduledays[$cmonth][$cday] = $this->schedule_model->get_datetime($cdate); 
			if ($cdate == "2023-01-01") 
				$s = (object) $schedule_11;
			else if ($cdate == "2023-01-21" || $cdate == "2023-01-22" || $cdate == "2023-01-23" || $cdate == "2023-01-24") 
				$s = (object) $schedule_122;
			else 
				$s = (object) $schedule_empty;
			$scheduledays[$cmonth][$cday] = $s; 
			if ( $chk ) {
				if ( $season->center->month != $cmonth ) {
					$season = $lunar->seasondate ($cdate);
				}	
				$fday = $lunar->tolunar ($cdate);
				$lyear = $fday->year;
				$lmonth = $fday->month;
				$lday = $fday->day;
				$chk == false;
			}
			if ( $fday->largemonth ) 
				$largemonth[] = true;
			else	
				$largemonth[] = false;
			$ly[] = $lyear;
			$lm[] = ($fday->leap ? '(閏)' : '').$lmonth;
			$ld[] = $lday;
	
			$s28day = $lunar->s28day($cdate);
			$l28su[] = "(".$s28day->h.")";
			$tune_ym = $lunar->dayfortune(date("Y-m-d", strtotime($cdate)));
			$y_liljin[] = $tune_ym->hyear;
			$m_liljin[] = $tune_ym->hmonth;
			$d_gindex = $tune_day->data->d + $i;
			if ( $d_gindex >= 60 )
				$d_gindex -= 60;
			$d_liljin[] = $lunar->ganji_ref($d_gindex, true);
			$lday++;
		}
		$prevmonth = $month - 1;
		$nextmonth = $month + 1;
		$prevyear = $nextyear = $year;
		if ($month == 1) {
			$prevmonth = 12;
			$prevyear = $year - 1;
		} 
		elseif ($month == 12) {
			$nextmonth = 1;
			$nextyear = $year + 1;
		}
		$prev_year = $year - 1;
		$next_year = $year + 1;
		$view_data = array(
		    'year' => $year,
		    'month' => $month,
			'today' => $today,
		    'thisyear' => $thisyear,
		    'thismonth' => $thismonth,
		    'prev_year' => $prev_year,
		    'prevyear' => $prevyear,
		    'prevmonth' => $prevmonth,
		    'nextyear' => $nextyear,
		    'nextmonth' => $nextmonth,
		    'next_year' => $next_year,
		    'lastday' => $lastday,
			'ly' => $ly,
			'lm' => $lm,
			'ld' => $ld,
			'y_liljin' => $y_liljin,
			'm_liljin' => $m_liljin,
			'd_liljin' => $d_liljin,
			'l28su' => $l28su,
			'holidays' => $holidays,			
			'memorialdays' => $memorialdays,			
			'scheduledays' => $scheduledays,			
			'season' => $season,
			'lunar' => $lunar,
			'largemonth' => $largemonth,
		);
		
	function SkipOffset($no, $sdate = '', $edate = '') 
	{
		for ($i = 1; $i <= $no; $i++) {
			$ck = $no - $i + 1;
			if ($sdate)
				$num = date('n.j', $sdate - (3600 * 24) * $ck);
			if ($edate)
				$num = date('n.j', $edate + (3600 * 24) * ($i - 1));
			echo "<div class='col span1_7 days' valign='top'><font class='gray'>$num</font></div>";
		}
	}
	function CalendarPrint($day, $style, $s28, $lunarday, $gangi, $holiname, $memorialname, $schedulename, $season24s) 
	{
		echo "<a href='' class='ahref'>".
		     "<font class=".$style.">".$day."</font></a>".
		     "<font class='lunarday'> $lunarday</font>".
			 "<font class='su28'> $s28</font><br/>";
			 
		echo "<font class='gangi'>$gangi</font><br/>";
		echo "<font class='season24s'>$season24s</font><br/>";
		echo "<font class='holiname'>$holiname</font><br/>";
		echo "<font class='memorial'>$memorialname</font><br/>";
		echo "<font class='schedule'>$schedulename->subject</font>";
	}
	
	$path = "";
?>
<div class="group">
	<div class="col span9_12">
		<div class="section group">
			<div align="center" class="col span1_7 calendar-title">
				<font class="calendar"> </font>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<font class="calendar"> </font>
			</div>
			<div align="center" class="col span3_7 calendar-title">
				<font class="calendar">Lunar Calendar</font>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<font class="calendar"> </font>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<font class="calendar"> </font>
			</div>
		</div>
		<div class="section group">
			<div align="center" class="col span1_7 calendar-title">
				<a href="<?php echo $path.'calendar.php?year='.$prev_year.'&month='.$month.'&day=1'; ?>"><font class="calendar"> ◀◀ </font></a>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<a href="<?php echo $path.'calendar.php?year='.$prevyear.'&month='.$prevmonth.'&day=1'; ?>"><font class="calendar"> ◀ </font></a>
			</div>
			<div align="center" class="col span3_7 calendar-title">
				<a href="<?php echo $path.'calendar.php?=yeay='.$thisyear.'&month='.$thismonth.'&day=1'; ?>">
					<font class="calendar"><?php echo " ".$year . '년 '; ?></font>
					<font class="calendar"><?php echo " ".$month . '월 '; ?></font>
					<font class="calendar"><?php echo " ".$today . '일 '; ?></font>
				</a>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<a href="<?php echo $path.'calendar.php?year='.$nextyear.'&month='.$nextmonth.'&day=1'; ?>"><font class="calendar"> ▶ </font></a>
			</div>
			<div align="center" class="col span1_7 calendar-title">
				<a href="<?php echo $path.'calendar.php?year='.$next_year.'&month='.$month.'&day=1'; ?>"><font class="calendar"> ▶▶ </font></a>
			</div>
		</div>
		<div class="section group">
			<div align="center" class="col span1_7 week"><font class="week">일</font></div>
			<div align="center" class="col span1_7 week"><font class="week">월</font></div>
			<div align="center" class="col span1_7 week"><font class="week">화</font></div>
			<div align="center" class="col span1_7 week"><font class="week">수</font></div>
			<div align="center" class="col span1_7 week"><font class="week">목</font></div>
			<div align="center" class="col span1_7 week"><font class="week">금</font></div>
			<div align="center" class="col span1_7 week"><font class="week">토</font></div>
		</div>
		<div class='section group'>
		<?php
			$day = 1;
			$offset = 0;
			$ck_row = 0;
			$gangi_temp = $y_liljin[$day-1].' '.$m_liljin[$day-1];
			// 시작 요일 구하기 : date("w", strtotime($year."-".$month."-01"));
			$offset = date('w', mktime(0, 0, 0, $month, $day, $year)); // 0: 일요일, 6: 토요일
			SkipOffset($offset, mktime(0, 0, 0, $month, $day, $year));
	
			while ($day <= $lastday) 
			{
				if ($offset == 0)
					$style = "holy"; // 일요일 빨간색으로 표기
				else if($offset == 6)
					$style = "blue"; // 토요일 빨간색 또는 파란색
				else
					$style = "black";
				//28수
				$s28 = $l28su[$day-1];
				$gangi_ym = $y_liljin[$day-1].' '.$m_liljin[$day-1];
				//세차 월건 일진 표시 (1일, 음력1일,15일 월건값이 바뀔때)	
				if ($day == 1 || $ld[$day-1] == 1 || $ld[$day-1] == 15 || $gangi_ym != $gangi_temp) {
					$gangi_temp = $gangi_ym;
					$lunarday = $lm[$day-1].'.'.$ld[$day-1]; //年月日
					$gangi = $y_liljin[$day-1].' '.$m_liljin[$day-1].' '.$d_liljin[$day-1];
					if($gangi_ym != $gangi_temp)
						$gangi .= '***';
				}	
				else {
					// 음력 일자 및 간지 데이터
					$lunarday = $lm[$day-1].'.'.$ld[$day-1]; //年月日
					$gangi = $y_liljin[$day-1].' '.$m_liljin[$day-1].' '.$d_liljin[$day-1];
				}	
				// 법적 공휴일
				$holiname = false;
				if (isset($holidays[$month][$day])) {
					$style = "holy";
					$holiname = $holidays[$month][$day];
				}	
				// 기념일
				$memorialname = false;
				if (isset($memorialdays[$month][$day])) {
					$style = "holy";
					$memorialname = $memorialdays[$month][$day];
				}	
				// 사용자 일정 데이터
				$schedulename = false;
				if (isset($scheduledays[$month][$day])) {
					$style = "holy";
					$schedulename = $scheduledays[$month][$day];
				}	
				//24절기
				$season24s = false;
				if ($season->center->month == $month && $season->center->day == $day)
					$season24s = $season->center->name."(".$season->center->hname.")";
				if ($season->ccenter->month == $month && $season->ccenter->day == $day)
					$season24s = $season->ccenter->name."(".$season->ccenter->hname.")";
				if ($season->nenter->month == $month && $season->nenter->day == $day)
					$season24s = $season->nenter->name."(".$season->nenter->hname.")";
				//$sqltimestamp = $year."-".$month."-".$day." 00:00:00";
				//$unixtimestamp  = strtotime($sqltimestamp);
				//$id = date('Y-m-d\TH:i', $unixtimestamp);
				//$id = $year."-".$month."-".$day;
				//달력의 날짜들(1일부터 말일까지)들의 id
				$id = str_pad($year, 4, "0", STR_PAD_LEFT)."-".  
					str_pad($month, 2, "0", STR_PAD_LEFT)."-".  
					str_pad($day, 2, "0", STR_PAD_LEFT);  
			
				if ($year == $thisyear && $month == $thismonth && $day == $today) { 
					echo "<div class='col span1_7 days-info active' valign='top' id='".$id."'>";
				}	
				else {
					if ($season24s)
						echo "<div class='col span1_7 days-info season24' valign='top' id='".$id."'>";
					else if (($ld[$day-1] == 1) || ($ld[$day-1] == 15)) {
						if ($largemonth[$day-1])
							echo "<div class='col span1_7 days-info largemoon' valign='top' id='".$id."'>";
						else
							echo "<div class='col span1_7 days-info smallmoon' valign='top' id='".$id."'>";
					}	
					else
						echo "<div class='col span1_7 days-info' valign='top' id='".$id."'>";
				}	
				
				CalendarPrint($day, $style, $s28, $lunarday, $gangi, $holiname, $memorialname, $schedulename, $season24s);
				echo "</div>"; //close col span
				$offset++;
				//다음줄 넘김
				if ($offset == 7) {
					$offset = 0;
					echo "</div>"; //close section group
					//말일이 아니라면 다음줄 시작
					if ($day < $lastday) {
						echo "<div class='section group'>";
						$ck_row++;
					}
				}
						
				$day++; // 날짜 증가
			}
			//줄의 끝(토요일)에서 끝난 것이 아니라면
			if ($offset != 0) {
				SkipOffset((7 - $offset), '', mktime(0, 0, 0, $month + 1, 1, $year));
				echo "</div>"; //close section group
			}
		?>
	</div>
	<div class="col span3_12">
		<div class="section group">
		<div id="schedule_form_div" class="schedule_form_div">
			<form id="schedule" name="schedule">
				<p><strong><span id="schedule_form_title">일정 입력</span></strong> (type/repeat/alarm)</p>
				<p><input type="text" id="subject" name="subject" size="60" style="width: 98%" placeholder="새로운 일정을 입력하세요."></p>
				<p><textarea id="contents" name="contents" rows="10" style="width: 98%" placeholder="contents"></textarea><p>
				<p><input type="time" id="time" name="time"> 알림시간</p>
				<p><strong>repeat / type / alarm</strong></p>
				<p>
					<select id="repeat" name="repeat">
						<option value="once">once</option>
						<option value="repeat">repeat</option>
					</select>
					<select id="type" name="type">
						<option value="none">none</option>
						<option value="day">day</option>
						<option value="week">week</option>
						<option value="month">month</option>
						<option value="year">year</option>
					</select>
					<select id="alarm" name="alarm">
						<option value="none">none</option>
						<option value="once">once</option>
						<option value="repeat">repeat</option>
					</select>
				</p>
				
				<div id="schedule_check_div" class="border schedule_check_div">
				<p><strong>lunar / month / day / time / check</strong></p>
				<p>
					<select id="schedule_lunar" name="schedule_lunar">
						<option value="solar">solar</option>
						<option value="lunar">lunar</option>
					</select>
					<input type="number" name="schedule_month" id="schedule_month" min="00" max="12">
					<input type="number" name="schedule_day" id="schedule_day" min="00" max="31">
					<select id="schedule_check" name="schedule_check" onchange="schedule_check_onchange(this);">
						<option value=0>none</option>
						<option value=1>active</option>
						<option value=-1>disable</option>
					</select>
				</p>
				</div>
				
				<div id="weekscheck_div" class="border weekscheck_div">
				<p><strong>day / weeksdate / month / check</strong></p>
				<p>
					<select id="weekday" name="weekday">
						<option value="none">none</option>
						<option value="all">all</option>
						<option value="일요일">일요일</option>
						<option value="월요일">월요일</option>
						<option value="화요일">화요일</option>
						<option value="수요일">수요일</option>
						<option value="목요일">목요일</option>
						<option value="금요일">금요일</option>
						<option value="토요일">토요일</option>
					</select>
					<select id="weeksdate" name="weeksdate">
						<option value="none">none</option>
						<option value="all">all</option>
						<option value="first">first</option>
						<option value="second">second</option>
						<option value="third">third</option>
						<option value="fourth">fourth</option>
						<option value="fifth">fifth</option>
					</select>
					<input type="number" name="weeksmonth" id="weeksmonth" min="00" max="12">
					<select id="weekscheck" name="weekscheck" onchange="weekscheck_onchange(this);">
						<option value=0>none</option>
						<option value=1>active</option>
						<option value=-1>disable</option>
					</select>
				</p>
				</div>
				<p><input type="date" id="start_date" name="start_date"> 일정시작일</p>
				<p><input type="date" id="end_date" name="end_date"> 일정종료일</p>
				<p>	
					<button type="button" id="schedule_read">읽기</button>
					<button type="button" id="schedule_insert">등록</button>
					<button type="button" id="schedule_update">수정</button>
					<button type="button" id="schedule_delete">삭제</button>
				</p>
			</form>
		</div>
		</div>
		<div id="ajaxinfo" name="ajaxinfo">ajaxinfo </div>
		<div id="disp_msg" name="disp_msg">disp_msg </div>
	</div>
</div>
<!--script type="text/javascript" src="jquery-1.11.1.min.js"></script-->
<script type="text/javascript">
	function ajaxinfo(msg){
		document.getElementById("ajaxinfo").textContent = msg;
		document.getElementById("ajaxinfo").innerText = msg;
	}
	function disp_msg(msg){
		document.getElementById("disp_msg").textContent = msg;
		document.getElementById("disp_msg").innerText = msg;
	}
	function sortNumber(a,b) {
		if (a > b) return -1;
		else if (b > a) return 1;
		else return 0;	
	}
	function element_has_class(items, className) 
	{
		//alert(JSON.stringify(items));
		for(var i = 0; i < items.length; i++) {
			var classlist = items[i].classList;
			for(var j = 0; j < classlist.length; j++) {
				if (classlist[j] == className) {
					return items[i];
				}
			}	
		}
		return false;
	}
    //목록에서 같은 클래스 이름을 가지고 있는 구성원을 전부 구해서 배열로 반환
	function elements_has_class(items, className) {
		var ret_elements = [];
		for(var i = 0; i < items.length; i++) {
			var classlist = items[i].classList;
			for(var j = 0; j < classlist.length; j++) {
				if (classlist[j] == className) {
					ret_elements.push(items[i]);
				}
			}	
		}
		return ret_elements;
	}
	function schedule_read(schedule_date, msg=""){
		var js_data = false;
		var schedule = false;
		disp_msg(msg);
        if (schedule_date == "2023-01-01") {
			js_data = '<?php echo json_encode($schedule_11); ?>';
			schedule = JSON.parse(js_data );
		}
		else if (schedule_date == "2023-01-21" || schedule_date == "2023-01-22" || schedule_date == "2023-01-23" || schedule_date == "2023-01-24") {
			js_data = '<?php echo json_encode($schedule_122); ?>';
			schedule = JSON.parse(js_data );
		}
		else {
			js_data = '<?php echo json_encode($schedule_empty); ?>';
			schedule = JSON.parse(js_data );
		}	
		//alert(JSON.stringify(schedule));
		//document.forms['schedule']['schedule_id'].value = schedule.id;
		document.forms['schedule']['subject'].value = schedule.subject;
		document.forms['schedule']['contents'].value = schedule.contents;
		document.forms['schedule']['time'].value = schedule.time;
		document.forms['schedule']['repeat'].value = schedule.repeat;
		document.forms['schedule']['type'].value = schedule.type;
		document.forms['schedule']['alarm'].value = schedule.alarm;
		document.forms['schedule']['schedule_lunar'].value = schedule.schedule_lunar;
		document.forms['schedule']['schedule_month'].value = schedule.schedule_month;
		document.forms['schedule']['schedule_day'].value = schedule.schedule_day;
		document.forms['schedule']['schedule_check'].value = schedule.schedule_check;
		document.forms['schedule']['weekday'].value = schedule.weekday;
		document.forms['schedule']['weeksdate'].value = schedule.weeksdate;
		document.forms['schedule']['weeksmonth'].value = schedule.weeksmonth;
		document.forms['schedule']['weekscheck'].value = schedule.weekscheck;
		document.forms['schedule']['start_date'].value = schedule.start_date;
		document.forms['schedule']['end_date'].value = schedule.end_date;
	};
	document.getElementById("schedule_read").addEventListener('click', function(event)
	{
		event.preventDefault();
	    //schedule_read(document.forms['schedule']['start_date'].value);
		//return false; 
		
  		var item = element_has_class(daysinfoList, days_active);
		if (item) {
		    schedule_read(item.id, "읽기 버튼을 눌렀습니다.");
		}	
		return false;
	} );
	var daysinfoList = document.getElementsByClassName("days-info"); //1일부터 말일까지 네모들
	var daysList = document.getElementsByClassName("days"); //달력의 1일 왼쪽 말일 오른쪽 네모들
    var days_smallmoon = "smallmoon"; //음력달이 작은 달이면 1일, 15일에 smallmoon classname 있다
    var days_largemoon = "largemoon"; //음력달이 큰 달이면 1일, 15일에 largemoon classname 있다
    var days_season24 = "season24"; //24절기이면 해당날짜에 season24 classname 있다, 해당날짜가 음력 1,15일이라도 smallmoon,largemoon 보다 우선 적용
    var days_active = "active"; //선택(클릭)된 날짜를 표시할 class name
	var heights = new Array();
	var highest = 0;
	var day = false;
	var	el_smallmoons = elements_has_class(daysinfoList, days_smallmoon);
	var	el_largemoons = elements_has_class(daysinfoList, days_largemoon);
	var	el_season24s = elements_has_class(daysinfoList, days_season24);
	for(var i = 0; i < daysinfoList.length; i++) {
		
		//달력의 숫자 네모박스의 실제 높이를 계산
		var h_str = window.getComputedStyle(daysinfoList[i]).height;
		h_str = h_str.replace('px', '');
		h_num = Number(h_str);
		//높이를 배열에 추가
		heights.push(h_num);
		//달력의 숫자 네모박스를 클릭할 때
		daysinfoList[i].addEventListener('click', function() 
		{
			event.preventDefault();
			//이전에 선택된 날짜의 days_active class name을 제거한다
			for(var j = 0; j < daysinfoList.length; j++) {
				daysinfoList[j].classList.remove(days_active);
			}
			
			//현재 선택된 날짜가 24절기이면 days_season24 class name을 제거한다
			//다른 날짜들(el_season24s[])은 days_season24 class name을 추가한다 
			for(var i = 0; i < el_season24s.length; i++) {
				if (this == el_season24s[i])
					this.classList.remove(days_season24);
				else
					el_season24s[i].classList.add(days_season24);
			}	
			//현재 선택된 날짜의 음력달이 작은 달이면 days_smallmoon class name을 제거한다
			//다른 날짜들(el_smallmoons[])은 days_smallmoon class name을 추가한다 
			for(var i = 0; i < el_smallmoons.length; i++) {
				if (this == el_smallmoons[i])
					this.classList.remove(days_smallmoon);
				else
					el_smallmoons[i].classList.add(days_smallmoon);
			}	
			//현재 선택된 날짜의 음력달이 큰 달이면 days_largemoon class name을 제거한다
			//다른 날짜들(el_largemoons[])은 days_largemoon class name을 추가한다 
			for(var i = 0; i < el_largemoons.length; i++) {
				if (this == el_largemoons[i])
					this.classList.remove(days_largemoon);
				else
					el_largemoons[i].classList.add(days_largemoon);
			}
			
			//현재 선택된 날짜에 days_active class name을 추가한다 
			this.classList.add(days_active);
            //일정을 읽는다
			//달력의 날짜들(1일부터 말일까지)들의 id
			//$id = str_pad($year, 4, "0", STR_PAD_LEFT)."-".  
			//	str_pad($month, 2, "0", STR_PAD_LEFT)."-".  
			//	str_pad($day, 2, "0", STR_PAD_LEFT);  
			//document.forms['schedule']['start_date'].value = this.id;
			disp_msg("");
		    schedule_read(this.id);
			return false; 
		} );
		//달력의 숫자를 클릭할 때
		daysinfoList[i].querySelector('.ahref').addEventListener('click', function(event)
		{
			event.preventDefault();
			//this.parentNode.classList.add(days_active);
			//read schedule data
		    //schedule_read(this.parentNode.id);
			return false; 
		} );
	}
	//배열을 내림차순으로 정렬	
	heights = heights.sort(sortNumber);
    //제일 큰 숫자 : 높이
	if (isNaN(highest[0])) {
		highest = heights[0]+'px'; 
	}	
	else {
		highest = heights[0]; 
	}
	//alert(JSON.stringify(heights));
	//alert(highest);
	
	//달력의 날짜표시 네모들의 높이를 같은 크기로 만든다
	for(var i = 0; i < daysinfoList.length; i++) {
		daysinfoList[i].style.height = highest;
	}
	//달력의 날짜표시 네모들의 높이를 같은 크기로 만든다
	for(var i = 0; i < daysList.length; i++) {
		daysList[i].style.height = highest;
	}
	//days_active class name 을 가지고 있는 요소가 있으면 누른다
	day = element_has_class(daysinfoList, days_active); //현재 선택된 날짜 
	if (day) {
		day.querySelector('.ahref').click();
	}	
	
</script>
<script type="text/javascript">
	function schedule_check_onchange(el){
		if (el.value == 1) {
			document.getElementById("schedule_check_div").classList.add('active');
			document.getElementById("schedule_lunar").disabled = false;
			document.getElementById("schedule_month").disabled = false;
			document.getElementById("schedule_day").disabled = false;
			document.getElementById("schedule_check").disabled = false;
			document.getElementById("weekscheck_div").classList.remove('active');
			document.getElementById("weekday").disabled = true;
			document.getElementById("weeksdate").disabled = true;
			document.getElementById("weeksmonth").disabled = true;
			document.getElementById("weekscheck").disabled = true;
		}	
		else if (el.value == -1) {
			document.getElementById("schedule_check_div").classList.remove('active');
			document.getElementById("schedule_lunar").disabled = true;
			document.getElementById("schedule_month").disabled = true;
			document.getElementById("schedule_day").disabled = true;
			document.getElementById("schedule_check").disabled = true;
			document.getElementById("schedule_check").value = -1;
			document.getElementById("weekscheck_div").classList.add('active');
			document.getElementById("weekday").disabled = false;
			document.getElementById("weeksdate").disabled = false;
			document.getElementById("weeksmonth").disabled = false;
			document.getElementById("weekscheck").disabled = false;
			document.getElementById("weekscheck").value = 1;
		}	
		else {
			document.getElementById("schedule_check_div").classList.remove('active');
			document.getElementById("schedule_lunar").disabled = false;
			document.getElementById("schedule_month").disabled = false;
			document.getElementById("schedule_day").disabled = false;
			document.getElementById("schedule_check").disabled = false;
			document.getElementById("schedule_check").value = 0;
			document.getElementById("weekscheck_div").classList.remove('active');
			document.getElementById("weekday").disabled = false;
			document.getElementById("weeksdate").disabled = false;
			document.getElementById("weeksmonth").disabled = false;
			document.getElementById("weekscheck").disabled = false;
		}	
	}
	function weekscheck_onchange(el){
		if (el.value == 1) {
			document.getElementById("schedule_check_div").classList.remove('active');
			document.getElementById("schedule_lunar").disabled = true;
			document.getElementById("schedule_month").disabled = true;
			document.getElementById("schedule_day").disabled = true;
			document.getElementById("schedule_check").disabled = true;
			document.getElementById("weekscheck_div").classList.add('active');
			document.getElementById("weekday").disabled = false;
			document.getElementById("weeksdate").disabled = false;
			document.getElementById("weeksmonth").disabled = false;
			document.getElementById("weekscheck").disabled = false;
		}	
		else if (el.value == -1) {
			document.getElementById("schedule_check_div").classList.add('active');
			document.getElementById("schedule_lunar").disabled = false;
			document.getElementById("schedule_month").disabled = false;
			document.getElementById("schedule_day").disabled = false;
			document.getElementById("schedule_check").disabled = false;
			document.getElementById("schedule_check").value = 1;
			document.getElementById("weekscheck_div").classList.remove('active');
			document.getElementById("weekday").disabled = true;
			document.getElementById("weeksdate").disabled = true;
			document.getElementById("weeksmonth").disabled = true;
			document.getElementById("weekscheck").disabled = true;
			document.getElementById("weekscheck").value = -1;
		}	
		else {
			document.getElementById("schedule_check_div").classList.remove('active');
			document.getElementById("schedule_lunar").disabled = false;
			document.getElementById("schedule_month").disabled = false;
			document.getElementById("schedule_day").disabled = false;
			document.getElementById("schedule_check").disabled = false;
			document.getElementById("weekscheck_div").classList.remove('active');
			document.getElementById("weekday").disabled = false;
			document.getElementById("weeksdate").disabled = false;
			document.getElementById("weeksmonth").disabled = false;
			document.getElementById("weekscheck").disabled = false;
			document.getElementById("weekscheck").value = 0;
		}	
	}
</script>
</body>
</html>
 | |||
| 다음글 | 개발자에게 유용한 북마크 툴 소개 | ||
| 이전글 | simple tab | ||
| 없음 |