| 제목 | 고영창님의 만세력 | ||
|---|---|---|---|
| 글쓴이 | 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 | ||
| 없음 |