| Source for file Lunar.phpDocumentation is available at Lunar.php 
 * Project: Lunar :: 양력/음력 변환 클래스<br> * 이 패키지는 양력/음력간의 변환을 제공한다. * 1852년 10월 15일 이전의 양력 날자는 율리우스력으로 취급을 하며, 내부 * 계산시에 그레고리력으로 변환을 하여 계산을 한다. * 이 변환 API의 유효기간은 다음과 같다. *     + -2087-02-09(음력 -2087-01-01) ~ 6078-01-29(음 6077-12-29) *     + -2087-07-05(음력 -2087-05-29) 이전은 계산이 무지 느려짐.. *     + -4712-02-08 ~ 9999-12-31 *     + API의 연도 체크가 4자리 까지이므로 10000년 이상은 확인 못함 *     + 64bit 계산이 가능한 시점까지 가능할 듯.. *     + 기원전의 경우 Julian date가 BC 4713년 1월 1일 부터이므로 *       Gregorian calendar 변환이 가능한 BC 4713년 2월 8일부터 가능 * 계산 처리 시간상, 과거 2000년전과 미래 100년후의 시간은 왠만하면 웹에서는 * oops\KASI_Lunar pear package를 설치한 후에, KASI_Lunar.php 를 include 하면, * 내부적으로 1391-02-05 ~ 2050-12-31 기간은 천문과학연구원의 음양력 DB를 이용하여 * Lunar package는 2가지 라이센스를 가지고 있다. Lunar 패키지의 * Core API (Lunar/Lunar_API.php)는 고영창님의 '진짜만세력' 코드를 PHP로 * 포팅한 것으로, 고영창님에게 라이센스가 있으며, front end API(Lunar.php)는 * 김정균이 작성한 코드들로 BSD license를 따른다. * @author      JoungKyun.Kim <http://oops.org> * @copyright   (c) 2024, OOPS.org * @license     BSD (Lunar.php) And 고영창(Lunar/Lunar_API.php) * @link        https://github.com/OOPS-ORG-PHP/Lunar * @since       File available since release 0.0.1 * @example     Lunar/tests/test.php Sample code * import myException classrequire_once 'myException.php';require_once 'Lunar/Lunar_API.php'; * 이 패키지는 양력/음력간의 변환을 제공한다. * 1852년 10월 15일 이전의 양력 날자는 율리우스력으로 취급을 하며, 내부 * 계산시에 그레고리력으로 변환을 하여 계산을 한다. * 이 변환 API의 유효기간은 다음과 같다. *     + -2087-02-09(음력 -2087-01-01) ~ 6078-01-29(음 6077-12-29) *     + -2087-07-05(음력 -2087-05-29) 이전은 계산이 무지 느려짐.. *     + -4712-02-08 ~ 9999-12-31 *     + API의 연도 체크가 4자리 까지이므로 10000년 이상은 확인 못함 *     + 64bit 계산이 가능한 시점까지 가능할 듯.. *     + 기원전의 경우 Julian date가 BC 4713년 1월 1일 부터이므로 *       Gregorian calendar 변환이 가능한 BC 4713년 2월 8일부터 가능 * 계산 처리 시간상, 과거 2000년전과 미래 100년후의 시간은 왠만하면 웹에서는 * oops\KASI_Lunar pear package를 설치한 후에, KASI_Lunar.php 를 include 하면, * 내부적으로 1391-02-05 ~ 2050-12-31 기간은 천문과학연구원의 음양력 DB를 이용하여 * @author      JoungKyun.Kim <http://oops.org> * @copyright   (c) 2024, OOPS.org * @license     BSD (Lunar.php) And 고영창(Lunar/Lunar_API.php) * @example     Lunar/tests/test.php Sample code    // {{{ +-- public version (void)     * oops\Lunar package 의 버전을 반환.        # 관리를 위하여 single quote 를 사용할 것!    // {{{ +-- public (array) toargs ($v, $lunar = fasle)     * 입력된 날자 형식을 연/월/일의 멤버를 가지는 배열로 반환한다.     * 입력된 변수 값은 YYYY-MM-DD 형식으로 변환 된다.     * {@example Lunar/tests/sample.php 30 25}     *    - unixstmap (1970년 12월 15일 이후부터 가능)    public function toargs (&$v, $lunar = false) {                $y = (int) date ('Y', $v);                $m = (int) date ('m', $v);                $d = (int) date ('d', $v);                if ( preg_match ('/^(-?[0-9]{1,4})[\/-]?([0-9]{1,2})[\/-]?([0-9]{1,2})$/', trim ($v), $match) ) {                    list ($y, $m, $d) = $match;                    throw new \myException ('Invalid Date Format', E_USER_WARNING);            // 넘어온 날자가 음력일 경우 아래가 실행되면 측정 날자가 달라질 수 있다.            if ( ! $lunar && $y > 1969 && $y < 2038 ) {                $fixed = mktime (0, 0, 0, $m, $d, $y);                $y = (int) date ('Y', $fixed);                $m = (int) date ('m', $fixed);                $d = (int) date ('d', $fixed);                if ( $m > 12 || $d > 31 ) {                    throw new \myException ('Invalid Date Format', E_USER_WARNING);        $v = $this->regdate (array ($y, $m, $d));        return array ($y, $m, $d);    // {{{ +-- public (string) human_year ($y)     * 연도를 human readable하게 표시     * {@example Lunar/tests/sample.php 56 11}     * @return string   AD/BC type의 연도    // {{{ +-- public (array) split_date ($date)     * YYYY-MM-DD 또는 array ((string) YYYY, (string) MM, (string) DD)     * 입력값을 * array ((int) $y, (int) $m, (int) $d)으로 변환     * @return array array ((int) $y, (int) $m, (int) $d)     *      - array ((string) YYYY, (string) MM, (stirng) DD)            $date = $this->regdate ($date);        $minus = ($date[0] == '-') ? true : false;        $date = $minus ? substr ($date, 1) : $date;        foreach ($r as $k => $v )    // {{{ +-- private (string) regdate ($v)     * @return string   YYYY-MM-DD 형식으로 반환     * @param array     년월일 배열 - array ($year, $month, $day)    private function regdate ($v) {        list ($year, $month, $day) = $v;            ($month < 10 ) ? '0' : '',    // {{{ +-- public (bool) is_leap ($y, $julian = false)     * {@example Lunar/tests/sample.php 68 14}     *  1582년 이전은 Julian calender로 판단하여 이 값이     *  false라도 율리우스력으로 간주하여 판단한다. (sinse 1.0.1)    public function is_leap ($y, $julian = false) {        // Julian의 윤년은 4로 나누어지면 된다.        if ( $julian || $y < 1583 )            return ($y % 4) ? false : true;        if ( ($y % 4) == 0 && ($y % 100) != 0 )    // {{{ +-- public (bool) is_gregorian ($y, $m, $d = 1)     * 해당 날자가 gregorian 범위인지 체크    // {{{ +-- private (string) gregorian2julian ($v)     *        [fmt] => 2013-06-09          // YYYY-MM-DD 형식의 Julian 날자     * @param array|intGregorian 연월일 배열 or Julian date count    private function gregorian2julian ($v) {            $d = $this->regdate ($v);            $v = $this->cal2jd (array ($y, $m, $d));                'fmt'   => $this->regdate (array ($r->year, $r->month, $r->day)),            $alpha = (int) ($Z - 1867216.25 / 36524.25);            $A = $Z + 1 + $alpha - (int) ($alpha / 4);        $C = (int) (($B - 122.1) / 365.25);        $D = (int) (365.25 * $C);        $E = (int) ( ($B - $D) / 30.6001);        $day = $B - $D - (int) (30.6001 * $E) + $F;        $month = ($E < 14) ? $E - 1 : $E - 13;            'fmt'   => $this->regdate (array ($year, $month, $day)),    // {{{ +-- private mod ($x, $y)    private function mod ($x, $y) {        return ($x % $y + $y) % $y;    // {{{ +-- private (string) julian2gregorian ($v)     *        [fmt]   => 2013-06-09        // YYYY-MM-DD 형식의 Julian 날자     * @param array|intJulian 연월일 배열 or Julian date count    private function julian2gregorian ($jd, $pure = false) {            $jd = $this->cal2jd (array ($y, $m, $d), true);                'fmt'   => $this->regdate (array ($r->year, $r->month, $r->day)),        // https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number        // 01-01-02 부터 이전은 맞지 않는다 --;        #$f = (int) ($f + (((4 * $jd + 274277) / 146097) * 3) / 4 - 38);        #$g = (int) (($e % 1461) / 4);        #$day = (int) (($h % 153) / 5 + 1);        #$month = (int) ((($h / 153 + 2) % 12) + 1);        #$year = (int) ($e / 1461 - 4716 + (12 + 2 - $month) / 12);        // http://www.fourmilab.ch/documents/calendar/        $wjd = floor ($jd -  0.5) + 0.5;        # GREGORIAN_EPOCH 1721425.5        $depoch = $wjd - 1721425.5;        $quadricent = floor ($depoch / 146097);        $dqc = $this->mod ($depoch, 146097);        $cent = floor ($dqc / 36524);        $dcent = $this->mod ($dqc, 36524);        $quad = floor ($dcent / 1461);        $dquad = $this->mod ($dcent, 1461);        $yindex = floor ($dquad / 365);        $year = ($quadricent * 400) + ($cent * 100) + ($quad * 4) + $yindex;        if ( ! ($cent == 4 || $yindex == 4) )        $yearday = $wjd - $this->cal2jd (array ($year, 1, 1));        $leapadj = (($wjd < $this->cal2jd (array ($year, 3, 1)))                    ? 0 : ($this->is_leap ($year) ? 1 : 2));        $month = floor (((($yearday + $leapadj) * 12) + 373) / 367);        $day = ceil ($wjd - $this->cal2jd (array ($year, $month, 1))) + 1;            'fmt'   => $this->regdate (array ($year, $month, $day)),    // {{{ +-- private (int) cal2jd_pure ($v, $julian = false)     * Gregorian 날자를 Julian date로 변환 (by PURE PHP CODE)     * http://new.astronote.org/bbs/board.php?bo_table=prog&wr_id=29929     * 1. Y는 해당년도, M는 월(1월=1,2월=2), D는 해당 월의 날짜이다.     *    D는 시간값도 포함한 소수값으로 생각하자. 가령 3일 12시 UT라면     * 2. M>2인 경우 Y,M은 변경하지 않는다. M = 1 또는 2인 경우 Y=Y-1,     * 3. 그레고리력(Gregorian Calendar)의 경우 아래처럼 계산한다.     *    A = INT(Y/100), B = 2 – A + INT(A/4)     *    여기서 INT는 ()안에 들어간 값을 넘지않는 가장 큰 정수이다.     *    율리우스력(Julian Calendar)의 경우 B=0이다.     *    JD = INT(365.25(Y+4716)) + INT(30.6001(M+1)) + D + B – 1524.5     *    여기서 30.6001은 정확히는 30.6을 써야한다. 하지만 컴퓨터 계산시     *    10.6이여 하는데 10.599999999 이런식으로 표현되는 경우가 발생하면     *    INT(10.6)과 INT(10.5999..)의 결과가 달라진다. 이 문제 대해 대처     *    하기 위해 30.6001을 사용한 것이다. 이러한 에러를 Round-off Error     * @return int Julian date     * @param array 연월일 배열 : array ($y, $m, $d)    private function cal2jd_pure ($v, $julian = false) {        $B = $julian ? 0 : 2 - $A + (int) ($A / 4);        $C = (int) (365.25 * ($y + 4716));        $D = (int) (30.6001 * ($m + 1));        return ceil ($C + $D + $d + $B - 1524.5);    // {{{ +-- private (int) cal2jd_ext ($v, $julian = false)     * Gregorian 날자를 Julian date로 변환 (by Calendar Extension)     * @return int Julian date     * @param array 연월일 배열 : array ($y, $m, $d)    private function cal2jd_ext ($v, $julian = false) {        $func = $julian ? 'JulianToJD' : 'GregorianToJD';        $r = $func ( (int) $m, (int) $d, (int) $y);    // {{{ +-- public (int) cal2jd ($v)     * Gregorian 날자를 Julian date로 변환     * @return int Julian date     * @param array 연월일 배열 : array ($y, $m, $d)    public function cal2jd ($v, $julian = false) {            return $this->cal2jd_ext ($v, $julian);        return $this->cal2jd_pure ($v, $julian);    // {{{ +-- private (string) toutc ($v)     * @return string YYYY-MM-DD-HH-II-SS     * @param string date format (YYYY-MM-DD HH:II:SS)    private function toutc ($v) {        $r = date ('Y-m-d-H-i-s', $t);    // {{{ +-- private (int) to_utc_julian ($v)     * 합삭/망 절기 시간을 UTC로 변환 후, Julian date로 표현     * @param string data format (YYYY-MM-DD HH:II:SS)    private function to_utc_julian ($v) {        $buf = $this->toutc ($v);        list ($y, $m, $d, $h, $i, $s) = $this->split_date ($buf);        //$julian = ( $chk < 18451015 ) ? $true : false;        $j = $this->cal2jd (array ($y, $m, $d), $julian);            $buf = (($h * 3600 + $i * 60) / 86400) * -1;            $buf = (($h - 12) * 3600 + $i * 60) / 86400;    // {{{ +-- private (array) fix_calendar ($y, $m, $d)     * 1582년 10월 15일 이전의 date를 julian calendar로 변환     * @return array 년월일 배열 (array ($y, $m, $d))    private function fix_calendar ($y, $m, $d) {        # 15821005 ~ 15821014 까지는 gregorian calendar에서는 존재        # 하지 않는다. 그러므로, 이 기간의 날자는 julian calendar        # 와 매치되는 날자로 변경한다. (10씩 빼준다.        if ( $chk > 15821004 && $chk < 15821015 ) {            $julian = $this->cal2jd (array ($y, (int) $m, (int) $d));            $r = $this->julian2gregorian ($julian);            list ($y, $m, $d) = array ($r->year, $r->month, $r->day);        # 15821005 보다 과거의 날자는 gregorian calendar가 없다.        # 그러므로 julian calendar로 표현한다.        if ( $this->is_gregorian ($y, (int) $m, (int) $d) === false ) {            $r = $this->julian2gregorian (array ($y, (int) $m, (int) $d));            list ($y, $m, $d) = array ($r->year, $r->month, $r->day);        return array ($y, $m, $d);    // {{{ +-- public (object) tolunar ($v = null)     * 진짜 만세력은 1582/10/15(Gregorian calendar의 시작) 이전의 날자     * 역시 Gregorian으로 표기를 한다. 그러므로 Calendar의 오류로 보일     * 수도 있다. (실제로는 계산상의 오류는 없다고 봐야 한다.)     * 이런 부분을 보정하기 위하여, tolunar method는 1582/10/04 까지의     * 날자는 julian calendar로 변환을 하여 음력날자를 구한다. 이로 인     * 하여 1582/10/15 이전의 음력 날자는 original 진짜 만세력과 다른     * 이렇게 표현될 경우, 천문우주 지식정보의 값과 비슷하게 나올 수는     * 있으나, 평달/큰달 계산은 진짜 만세력의 것을 이용하므로 오차는     * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115     * 2.0 부터는 이러한 오차를 줄이기 위하여 oops\KASI_Lunar package가     * 설치되어 있을 경우, 1392-02-05 ~ 2050-12-31 기간에 대해서는     * 천문과학연구원의 데이터를 이용할 수 있도록 지원한다.     * {@example Lunar/tests/sample.php 83 35}     * @return stdClass    음력 날자 정보 반환     *        [fmt] => 2013-06-09          // YYYY-MM-DD 형식의 음력 날자     *        [hyear] => AD 2013           // AD/BC 형식의 연도     *        [largemonth] => 1            // 평달/큰달 여부     *        [unixstamp] => 1373900400    // unixstamp (양력 날자)     *        [hganji] => 癸巳             // 한자 세차     *        [hgan] => 癸                 // 세차 한자 10간     *        [hji] => 巳                  // 세차 한자 12지     *    - unixstmap (1970년 12월 15일 이후부터 가능)     *    - 1582년 10월 15일 이전의 날자는 율리우스력의 날자로 취급함.    public function tolunar ($v = null) {        list ($y, $m, $d) = $this->toargs ($v);        #printf ("** %4s.%2s.%2s ... ", $y, $m, $d);        // 1391-02-05 ~ 2050-12-31 까지는 KASI data로 처리를 한다.        if ( $cdate > 13910204 && $cdate < 20510101 ) {                if ( $this->KASI == null )                    $this->KASI = new \oops \KASI \Lunar;                # Lunar_KASI::tolunar method 는 1391-02-05 ~ 2050-12-31 구간을 벗어나면 Exception 을                # 발생 시킨다. 그러므로 예외 처리가 필요하다. 하지만 여기서는 상단에 이미 에외 구간을                # 제한하고 있어, 딱히 예외 처리를 할 필요는 없다.                $r = $this->KASI->tolunar ($v);                $r = array ($year, $month, $day);            list ($y, $m, $d) = $this->fix_calendar ($y, $m, $d);            #printf ("%4s.%2s.%2s<br>", $y, $m, $d);            list ($year, $month, $day, $leap, $lmonth) = $r;        if ( $k1 < 0 ) $k1 += 10;        if ( $k2 < 0 ) $k2 += 12;            'fmt'        => $this->regdate ($r),            'week'       => $this->week[$w],            'hweek'      => $this->hweek[$w],            'unixstamp'  => mktime (0, 0, 0, $m, $d, $y),            'ganji'      => $this->gan[$k1] . $this->ji[$k2],            'hganji'     => $this->hgan[$k1] . $this->hji[$k2],            'gan'        => $this->gan[$k1],            'hgan'       => $this->hgan[$k1],            'hji'        => $this->hji[$k2],    // {{{ +-- public (object) tosolar ($v = null, $leap = false)     * 구하는 음력월이 윤달인지 여부를 알 수 없을 경우, tosolar method     * 를 실행하여 얻은 양력 날자를 다시 tolunar로 변환하여 비교하여     * 동일하지 않다면, 윤달 파라미터 값을 주고 다시 구해야 한다!     * 진짜 만세력은 Gregorian으로 표기를 하기 때문에, 양력 1582-10-15     * 이전의 경우에는 return object의 julian member 값으로 비교를 해야     * {@example Lunar/tests/sample.php 119 42}     * @return stdClass    양력 날자 정보 object 반환     *        [jd] => 2456527             // Julian Date Count     *        [fmt] => 2013-07-16         // YYYY-MM-DD 형식의 양력 날자 (15821015 이전은 율리우스력)     *        [gregory] => 2013-07-16     // Gregory Calendar     *        [julian] => 2013-08-09      // Julian Calendar     *        [dangi] => 4346             // 단기 (양력)     *        [hyear] => AD 2013          // AD/BC 형식 년도     *        [year] => 2013              // 양력 연도     *        [unixstamp] => 1373900400   // unixstamp (양력)     *        [hganji] => 癸巳            // 세차 한자     *        [hgan] => 癸                // 세차 한자 10간     *        [hji] => 巳                 // 세차 한자 12지     *    - unixstmap (1970년 12월 15일 이후부터 가능)    public function tosolar ($v = null, $leap = false) {        list ($y, $m, $d) = $this->toargs ($v, true);        // 1391-01-01 ~ 2050-12-31 까지는 KASI data로 처리를 한다.        if ( $cdate > 13910101 && $cdate < 20501119 ) {                if ( $this->KASI == null )                    $this->KASI = new \oops \KASI \Lunar;                # Lunar_KASI::tosolar method 는 1391-01-01 ~ 2050-12-31 구간을 벗어나면 Exception 을                # 발생 시킨다. 그러므로 예외 처리가 필요하다. 하지만 여기서는 상단에 이미 에외 구간을                # 제한하고 있어, 딱히 예외 처리를 할 필요는 없다.                $r = $this->KASI->tosolar ($v, $leap);                    $j    = $this->gregorian2julian ($r->jd);                    $g    = $this->julian2gregorian ($r->jd);            list ($year, $month, $day) = $r;            //$julian = $this->gregorian2julian ($r);            $julian = $this->gregorian2julian ($jdate);            $gfmt   = $this->regdate ($r);            $fmt = ($jdate < 2299161) ? $jfmt : $gfmt;        if ( $k1 < 0 ) $k1 += 10;        if ( $k2 < 0 ) $k2 += 12;            'week'       => $this->week[$w],            'hweek'      => $this->hweek[$w],            'unixstamp'  => mktime (0, 0, 0, $month, $day, $year),            'ganji'      => $this->gan[$k1] . $this->ji[$k2],            'hganji'     => $this->hgan[$k1] . $this->hji[$k2],            'gan'        => $this->gan[$k1],            'hgan'       => $this->hgan[$k1],            'hji'        => $this->hji[$k2],    // {{{ +-- public (object) dayfortune ($v = null)     * 세차(년)/월건(월)/일진(일) 데이터를 구한다.     * {@example Lunar/tests/sample.php 163 56}     *        [data] => stdClass Object     *        [hyear] => 癸巳              // 한자 세차 값     *        [hmonth] => 己未             // 한자 월건 값     *        [hday] => 癸未               // 한자 일진 값     *     - unixstmap (1970년 12월 15일 이후부터 가능)     *     - 1582년 10월 15일 이전의 날자는 율리우스력의 날자로 취급함.        list ($y, $m, $d) = $this->toargs ($v);        list ($y, $m, $d) = $this->fix_calendar ($y, $m, $d);        list ($so24, $year, $month, $day, $hour)            'data' => (object) array ('y' => $year, 'm' => $month, 'd' => $day),            'year' => $this->ganji[$year],            'month' => $this->ganji[$month],            'day' => $this->ganji[$day],            'hyear' => $this->hganji[$year],            'hmonth' => $this->hganji[$month],            'hday' => $this->hganji[$day],    // {{{ +-- public (object) s28day ($v = null)     * {@example Lunar/tests/sample.php 221 35}     *        [data] => 5    // 28수 index     *     - unixstmap (1970년 12월 15일 이후부터 가능)     *     - 1582년 10월 15일 이전의 날자는 율리우스력의 날자로 취급함.     *     - Recursion s28day return value:<br>     *       loop에서 s28day method를 반복해서 호출할 경우 return value를 이용할     *       경우, return value의 index값을 이용하여 계산을 하지 않아 속도가 빠름.    public function s28day ($v = null) {        list ($y, $m, $d) = $this->toargs ($v);        list ($y, $m, $d) = $this->fix_calendar ($y, $m, $d);    // {{{ +-- public (array) seasondate ($v = null)     * 해당 양력일에 대한 음력 월의 절기 시간 구하기     * 2.0.1 부터는 KASI-Lunar 2.0.0 이상이 설치 되어 있을 경우,     * 천문과학연구원의 2004~2026 의 절기 데이터를 이용한다.     * {@example Lunar/tests/sample.php 257 52}     * @return stdClass   현달 초입/중기와 다음달 초입 데이터 반환     *        [center] => stdClass Object      // 이번달 초입 데이터     *                [hname] => 小暑             // 절기 한자 이름     *                [hyear] => AD 2013          // AD/BC 형식 연도     *                [year] => 2013              // 초입 연도     *                [julian] => 2456480.4506944 // Julian date (UTC)     *        [ccenter] => stdClass Object     // 이번달 중기 데이터     *                [hname] => 大暑             // 절기 한자 이름     *                [hyear] => AD 2013          // AD/BC 형식 연도     *                [year] => 2013              // 중기 연도     *                [julian] => 2456496.1743056 // Julian date (UTC)     *        [nenter] => stdClass Object      // 다음달 초입 데이터     *                [hname] => 立秋             // 절기 한자 이름     *                [hyear] => AD 2013          // AD/BC 형식 연도     *                [year] => 2013              // 초입 연도     *                [julian] => 2456511.8583333 // Julian date (UTC)     *   - unixstmap (1970년 12월 15일 이후부터 가능)     *   - 1582년 10월 15일 이전의 날자는 율리우스력의 날자로 취급함.        list ($y, $m, $d) = $this->toargs ($v);        list ($y, $m, $d) = $this->fix_calendar ($y, $m, $d);            $inginame, $ingiyear, $ingimonth, $ingiday, $ingihour, $ingimin,            $midname, $midyear, $midmonth, $midday, $midhour, $midmin,            $outginame, $outgiyear, $outgimonth, $outgiday, $outgihour, $outgimin        $j_ce = $this->to_utc_julian (                $this->regdate (array ($ingiyear, $ingimonth, $ingiday)),                $ingihour < 10 ? '0' . $ingihour : $ingihour,                $ingimin < 10 ? '0' . $ingimin : $ingimin        // 1852-10-15 이전이면 julian으로 변경        if ( $this->is_gregorian ($ingiyear, $ingimonth, $ingiday) === false ) {            $r = $this->gregorian2julian (array ($ingiyear, $ingimonth, $ingiday));        $j_cc = $this->to_utc_julian (                $this->regdate (array ($midyear, $midmonth, $midday)),                $midhour < 10 ? '0' . $midhour : $midhour,                $midmin < 10 ? '0' . $midmin : $midmin        // 1852-10-15 이전이면 julian으로 변경        if ( $this->is_gregorian ($midyear, $midmonth, $midday) === false ) {            $r = $this->gregorian2julian (array ($midyear, $midmonth, $midday));        $j_ne = $this->to_utc_julian (                $this->regdate (array ($outgiyear, $outgimonth, $outgiday)),                $outgihour < 10 ? '0' . $outgihour : $outgihour,                $outgimin < 10 ? '0' . $outgimin : $outgimin        // 1852-10-15 이전이면 julian으로 변경        if ( $this->is_gregorian ($outgiyear, $outgimonth, $outgiday) === false ) {            $r = $this->gregorian2julian (array ($outgiyear, $outgimonth, $outgiday));            'center'  => (object) array (            'ccenter' => (object) array (            'nenter'  => (object) array (        # KASI-Lunar package 가 있으면, 천문과학연구원의 2004~2026년도 절기 데이터를            if ( $this->KASI == null )                $this->KASI = new \oops \KASI \Lunar;            # KASI-Lunar > 2.0.0 부터 사용 가능하다.            # season method 가 없으면 진짜만세력 절기 데이터를 그냥 반환한다.            foreach ( $r as $k => $v ) {                # 2004-01 ~ 2026-12 이 후의 범위에서 Exception 이 발생하므로 예외 처리를 해 줘야 한다.                # KASI_Lunar 2.0.1 부터는 KASI_Lunar::is_exception = false; 설정으로 Exception 를                    $kv = $this->KASI->season ($r->{$k}->name, $r->{$k}->year);                        $r->{$k}->month  = $kv->month;                        $r->{$k}->day    = $kv->day;                        $r->{$k}->hour   = $kv->hour;                        $r->{$k}->julian = $this->to_utc_julian (                                $this->regdate (array ($r->{$k}->year, $r->{$k}->month, $r->{$k}->day)),                                $r->{$k}->hour < 10 ? '0' . $r->{$k}->hour : $r->{$k}->hour,                                $r->{$k}->min < 10 ? '0' . $r->{$k}->min  : $r->{$k}->min    // {{{ +-- public (object) moonstatus ($v = null)     * 양력일에 대한 음력월 합삭/망 데이터 구하기     * {@example Lunar/tests/sample.php 311 56}     * @return stdClass    합삭/망 object     *        [new] => stdClass Object      // 합삭 (New Moon) 데이터     *                [hyear] => AD 2013          // 합삭 AD/BC 형식 연도     *                [year] => 2013              // 합삭 연도     *                [julian] => 2456481.8020833 // Julian date (UTC)     *        [full] => stdClass Object     // 망 (Full Moon) 데이터     *                [hyear] => AD 2013          // 망 AD/BC 형식 연도     *                [julian] => 2456496.2493056 // Julian date (UTC)     *    - unixstmap (1970년 12월 15일 이후부터 가능)     *    - 1582년 10월 15일 이전의 날자는 율리우스력의 날자로 취급함.        list ($y, $m, $d) = $this->toargs ($v);        list ($y, $m, $d) = $this->fix_calendar ($y, $m, $d);            $y1, $mo1, $d1, $h1, $mi1,            $ym, $mom, $dm, $hm, $mim,        $j_new = $this->to_utc_julian (                $this->regdate (array ($y1, $mo1, $d1)),                $h1 < 10 ? '0' . $h1 : $h1,                $mi1 < 10 ? '0' . $mi1 : $mi1        // 1852-10-15 이전이면 julian으로 변경            $r = $this->gregorian2julian (array ($y1, $mo1, $d1));        $j_full = $this->to_utc_julian (                $this->regdate (array ($ym, $mom, $dm)),                $hm < 10 ? '0' . $hm : $hm,                $mim < 10 ? '0' . $mim : $mim        // 1852-10-15 이전이면 julian으로 변경            $r = $this->gregorian2julian (array ($ym, $mom, $dm));            'new' => (object) array (            'full' => (object) array (    // {{{ +-- public (string) ganji_ref ($no, $mode = false)     * dayfortune method의 ganji index 반환값을 이용하여, ganji     * {@example Lunar/tests/sample.php 163 56}     * @param int ganji index number     * @param bool 출력 모드 (false => 한글, true => 한자)    public function ganji_ref ($no, $mode = false) {        $m = $mode ? 'hganji' : 'ganji'; * vim: set filetype=php noet sw=4 ts=4 fdm=marker: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 |