Lunar Pear class์ ๋ผ์ด์ผ์ค๋ ๋ณตํฉ ๋ผ์ด์ผ์ค ์ด๋ฏ๋ก, ์ฃผ์๊ฐ ํ์ํ๋ค.
- Lunar.php : BSD
- ์ง์ง ๋ง์ธ๋ ฅ ํฌํ
class :
- Lunar/Lunar_API.php
- ๊ณ ์์ฐฝ
- ์ง์ง ๋ง์ธ๋ ฅ์ด open source ์ด๊ธฐ๋ ํ์ง๋ง, ์ ํํ license๊ฐ ํ๊ธฐ๋์ด ์์ง์๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ํํ์ด์ง ๊ฐ์ ๊ณณ์์ ์ฌ์ฉํ๋ ๊ฒ์๋ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ์์ผ๋, ์์ฉ ํจํค์ง ์ ํ์ ํฌํจ์ ์ํค๋ ๊ฒ์ ์ฃผ์ ํ๋ ๊ฒ์ด ์ข๋ค. ์ด ํจํค์ง๋ฅผ ์ฌ์ฉํจ์ ์์ด ์๋ฌด๋ฐ ๊ฐ๋ฐํฐ๋ฅผ ํ์ง ์๋๋ค.
Lunar Pear package๋ ๊ณ ์์ฐฝ๋์ ์ง์ง๋ง์ธ๋ ฅ 0.92 Perl ๋ฒ์ ์ PHP๋ก ํฌํ ํ ๊ฒ์ด๋ค.
๊ณ ์์ฐฝ๋์ ์ง์ง๋ง์ธ๋ ฅ์ ์ ๊ธฐ์๊ฐ๊ณผ ํฉ์ญ์๊ฐ์ ์ ๋ฐํ๊ฒ ๊ณ์ฐํ์ฌ ๋ง๋ ๋ง์ธ๋ ฅ์ ๋๋ค. (DB๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค.) ์ ํจ๊ธฐ๊ฐ์ -10000๋ ๋ถํฐ 10000๋ ๊น์ง์ ๊ธฐ๊ฐ์ ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ์ 1582๋ 10์ 15์ผ ๋ถํฐ ์กด์ฌํ๋ค.
- 1582๋ 10์ 15์ผ ์ด์ ์ ์จ๋ฆฌ์ฐ์ค๋ ฅ์ผ๋ก ํ๊ธฐํ๋ค.
- 1582๋ 10์ 5์ผ ๋ถํฐ 1582๋ 10์ 14์ผ์ calender์์ ์กด์ฌํ์ง ์๋๋ค.
- ๊ฐ๋ฐ์: ๊ณ ์์ฐฝ
- Homepage: http://afnmp3.homeip.net:81/~kohyc/calendar/index.cgi
- ๋๋ถ๋ถ์ calendar๋ค์ 1582๋ 10์ 15์ผ ์ด์ ์ ์จ๋ฆฌ์ฐ์ค๋ ฅ์ผ๋ก ํ๊ธฐํ๋ค.
- ์ง์ง๋ง์ธ๋ ฅ์ ๋ชจ๋ ํ์๋ฅผ ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ์ผ๋ก ํ๊ธฐํ๋ค.
- ์ฌ์ง์ด ์ง์ง๋ง์ธ๋ ฅ์ ์กด์ฌํ์ง ์๋ 1582.10.5~1582.10.14 ๊ธฐ๊ฐ์ ํ์ํ๋ค.
- ์๋นํ ๊ฑฐ์น(๊ฐ๋ฐ์์ ์ฃผ๊ด์ด ๊ฐํ๊ฒ ๋ค์ด๊ฐ) ๊ทผ์ฟ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๊ตญ ์ฒ๋ฌธ ์ฐ๊ตฌ์์ ๋ฐ์ดํฐ์ ์ฝ๊ฐ์ ์ค์ฐจ๊ฐ ๋ฐ์ํ๋ค.
- ์๋ ฅ ๋ ์๊ฐ ๋ค๋ฅธ ๋ฌ
- ์ง์ง๋ง์ธ๋ ฅ ์ค๋ฅ๋ผ๋๋ฐ..
- ์๋ ฅ 2015๋ ๊ณผ 2016๋ , ๊ทธ๋ฆฌ๊ณ 2017๋ ์ ์๋ฃ๊ฐ ์ฝ๊ฐ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ์๋ ฅ๋ฌ๋ ฅ ์ค๋ฅ ํฌ์ฑ์ดโฆๅๆฅยทๅถๆฅ์ด ๋ค์ฃฝ๋ฐ์ฃฝ (์ธ๊ณ์ผ๋ณด)
- ์ง์ง๋ง์ธ๋ ฅ ๊ฒ์ฆ ํ๊ธฐ
- ์ง์ง๋ง์ธ๋ ฅ ๊ฒ์ฆ 1900-2298
์ด๋ฐ ์ด์ ๋ก ๊ณ ์์ฅ๋์ ์ง์ง๋ง์ธ๋ ฅ์ 1582๋ 10์ 15์ผ ์ด์ ์ ๋ฐ์ดํฐ์ ๋ํด์๋ ์จ๋ฆฌ์๋ ฅ์ผ๋ก ํ๊ธฐ๋ฅผ ํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํ ๋ค๋ฅธ ๋ฌ๋ ฅ ์ฒ๋ผ ๋ณด์ด๊ณ ์์ผ๋ฉฐ, 2000๋ ์ดํ์์ ์๊ฐ์ด ๊ฒฝ๊ณผ ๋ ์๋ก JPL ์ฒ์ฒด๋ ฅ DE431๊ณผ ๋ค์ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ฒ ๋๋ค.
ํ์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํด์ ๊ณ ์์ฐฝ๋์ ๋ฌ๋ ฅ์ด ์๋ชป๋์๋ค๊ณ ํ ์๋ ์์ผ๋ฉฐ(๋ฌผ๋ก ๋ง๋ค๊ณ ํ ์๋ ์๋ค), ์จ๋ฆฌ์ฐ์ค ์ ์ผ(Julian date)์ ๊ฒฝ์ฐ์๋ ์ ํํ ํ๊ธฐ๋ฅผ ํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๋ํ, ๊ธฐ์กด์ ๋ฌ๋ ฅ๋ค์ด database๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋, ๊ณ ์์ฐฝ๋์ ์ง์ง๋ง์ธ๋ ฅ์ ๊ณ์ฐ์ ์ํ์ฌ ์ฌ์ฉ ๋๋ฏ๋ก, ์๋ ฅ ์ค๋ฌ์ ๊ธฐ์ค์ด ์กฐ๊ธ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ๊ฐ์ด๋ ์๋ ฅ์ค๋ฌ์ ์ฐจ์ด๋ก ์ธํ์ฌ ์๋ ฅ๋ ์๊ฐ 1~2์ผ ์ ๋๊ฐ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด์ ๋ํด์๋ ๊ณ ์์ฐฝ๋์ ํํ์ด์ง๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
- ๋ชจ๋ ๊ณ์ฐ์ original ์ง์ง๋ง์ธ๋ ฅ์ ๊ณ์ฐ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค. (์ด๋ ๋ค๋ฅธ calendar๋ค๊ณผ ์๋ ฅ ๋ ์๊ฐ 1~2์ผ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๊ณ , ์๋ ฅ ์ค๋ฌ์ด ๋ค๋ฅผ ์ ์๋ค.)
- 1582๋ 10์ 15์ผ ์ด์ ์ ํ๊ธฐ๋ฅผ ์จ๋ฆฌ์ฐ์ค๋ ฅ์ ์ฌ์ฉํ๋ค. (๋ค๋ฅธ calender๋ค๊ณผ ์ญ์ฌ ๊ธฐ๋ก๊ณผ ๋ง์ถ๊ธฐ ์ํด์...)
- ์จ๋ฆฌ์ฐ์ค๋ ฅ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์์ calender๋ BC 4713๋ 2์ 8์ผ ๋ถํฐ ๊ฐ๋ฅํ๋ค.
- ์์ ์ด์ ๋ ์ง์ง๋ง์ธ๋ ฅ์ ๊ณ์ฐ์ ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์จ๋ฆฌ์ฐ์ค๋ ฅ์ ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ์ผ๋ก ๋ณํํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฝ ๋๋ฌธ์ด๋ค.
- 2.0 ๋ถํฐ๋ KASI-Lunar package pear package๊ฐ ์ค์น๋์ด ์์ ๊ฒฝ์ฐ, 1391-02-05 ~ 2050-12-31 ๊น์ง๋ ํ๊ตญ์ฒ๋ฌธ์ฐ๊ตฌ์์ ์์๋ ฅ DB๋ฅผ ์ง์ํ๋ค.
๊ณ ์์ฐฝ๋์ ์ง์ง๋ง์ธ๋ ฅ๊ณผ ๋์ผํ๊ฒ ํฌํ ํ ๋ฒ์ ์ ์ํ ๊ฒฝ์ฐ, http://oops.org/project/manse/original ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋๋ก ํ๋ค.
- 32bit:
- ์๋ ฅ BC 2086(-2087)๋ 2์ 9์ผ ~ AD 6078๋ 1์ 29์ผ
- ์๋ ฅ BC 2086(-2087)๋ 1์ 1์ผ ~ AD 6077๋ 12์ 29์ผ
- BC 2087๋ 7์ 5์ผ๋ถํฐ๋ ๊ณ์ฐ์ด ๊ธ์ํ๊ฒ ๋๋ ค์ง๋ค.
- 64bit:
- BC 4713(-4712)๋ 2์ 8์ผ ~ AD 9999๋ 12์ 31์ผ
- API์ ์ฐ๋ ์ฒดํฌ๊ฐ 4์๋ฆฌ ๊น์ง์ด๋ฏ๋ก 10000๋ ์ด์์ ํ์ธ ๋ชปํจ
- 64bit ๊ณ์ฐ์ด ๊ฐ๋ฅํ ์์ ๊น์ง ๊ฐ๋ฅํ ๋ฏ..
- ๊ธฐ์์ ์ ๊ฒฝ์ฐ ์จ๋ฆฌ์ฐ์ค ์ ์ผ์ด BC 4713๋ 1์ 1์ผ ๋ถํฐ์ด๋ฏ๋ก ๊ทธ๋ ๊ณ ๋ฆฌ๋ ฅ ๋ณํ์ด ๊ฐ๋ฅํ BC 4713๋ 2์ 8์ผ๋ถํฐ ๊ฐ๋ฅํ๋ค.
[root@host ~]$ pear channel-discover pear.oops.org
Adding Channel "pear.oops.org" succeeded
Discovery of channel "pear.oops.org" succeeded
[root@host ~]$ pear install oops/Lunar
- PHP >= 5.1.0
- PHP extensions
- calendar
- pear packages
- myException >= 1.0.1
- KASI-Lunar (optional) >= 1.0.0
http://pear.oops.org/docs/oops-Lunar/Lunar/Lunar.html
<?php
/*
* Lunar API import
*/
/*
* oops/KASI_Lunar pcakge๊ฐ ์ค์น ๋์ด ์์ผ๋ฉด, 1391-02-05 ~ 2050-12-31 ๊น์ง์ ์๋ ฅ ๋ฐ์ดํฐ๋ฅผ
* ํ๊ตญ ์ฒ๋ฌธ ์ฐ๊ตฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ค.
*/
require_once 'KASI_Lunar.php';
require_once 'Lunar.php';
$target = $argv[1] ? $argv[1] : date ('Ymd', time ());
$lunar = new oops\Lunar;
/*
* $lunar->toargs (&$v)
*
* input:
* 2013-07-13
* 2013-7-13
* 20130713
* 1373641200
* Null
*
* output:
* Array
* (
* [0] => 2013
* [1] => 7
* [2] => 13
* )
*
* and reference variavble $v is changed to '2013-07-13'
*/
$v = '2013-7-13';
$r = $lunar->toargs ($v);
echo "### $v\n";
print_r ($r);
/*
* $lunar->human_year ($y)
*
* input:
* -2334
*
* output:
* BC 2333
*/
echo $lunar->human_year (-2333);
/*
* $lunar->is_reap ($y)
*
* input:
* 1992 (์๋ ฅ)
*
* output:
* true
*/
if ( $lunar->is_leap (1992) )
echo "This is Yoon Year\n";
else
echo "This is not Yoon Year\n";
/*
* $lunar->tolunar ($date)
*
* input:
* 2013-07-16 or
* 2013-7-16 or
* 20130716 or
* 1373900400 or
* NULL
*
* output
* stdClass Object
* (
* [fmt] => 2013-06-09
* [dangi] => 4346
* [hyear] => AD 2013
* [year] => 2013
* [month] => 6
* [day] => 9
* [leap] =>
* [largemonth] => 1
* [week] => ํ
* [hweek] => ็ซ
* [unixstamp] => 1373900400
* [ganji] => ๊ณ์ฌ
* [hganji] => ็ธๅทณ
* [gan] => ๊ณ
* [hgan] => ็ธ
* [ji] => ์ฌ
* [hji] => ๅทณ
* [ddi] => ๋ฑ
* )
*/
print_r ($lunar->tolunar ('2013-07-16'));
/*
* $lunar->tosolar ($date)
*
* input:
* 2013-06-09 or
* 2013-6-09 or
* 20130609 or
* NULL
*
* output
* stdClass Object
* (
* [fmt] => 2013-07-16
* [dangi] => 4346
* [hyear] => AD 2013
* [year] => 2013
* [month] => 7
* [day] => 16
* [week] => ํ
* [hweek] => ็ซ
* [unixstamp] => 1373900400
* [ganji] => ๊ณ์ฌ
* [hganji] => ็ธๅทณ
* [gan] => ๊ณ
* [hgan] => ็ธ
* [ji] => ์ฌ
* [hji] => ๅทณ
* [ddi] => ๋ฑ
* )
*/
print_r ($lunar->tosolar ('2013-06-09'));
/*
* ๊ตฌํ๋ ์๋ ฅ์์ ์ค๋ฌ ์ฌ๋ถ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ธ
* ๊ณผ์ ์ด ํ์ํ๋ค.
*/
$lun = '2013-06-09';
$solv = $lunar->tosolar ($lun);
$lunv = $lunar->tolunar ($sol->fmt);
if ( $lun != $lunv->fmt )
$solv = $lunar->tosolar ($lun, true);
/*
* $lunar->dayfortuen ($date)
*
* input:
* 2013-07-16 or
* 2013-7-16 or
* 20130716 or
* 1373900400 or
* NULL
*
* output:
* stdClass Object
* (
* [data] => stdClass Object
* (
* [y] => 29 // ์ธ์ฐจ index
* [m] => 55 // ์๊ฑด index
* [d] => 19 // ์ผ์ง index
* )
*
* [year] => ๊ณ์ฌ // ์ธ์ฐจ ๊ฐ
* [month] => ๊ธฐ๋ฏธ // ์๊ฑด ๊ฐ
* [day] => ๊ณ๋ฏธ // ์ผ์ง ๊ฐ
* [hyear] => ็ธๅทณ // ํ์ ์ธ์ฐจ ๊ฐ
* [hmonth] => ๅทฑๆช // ํ์ ์๊ฑด ๊ฐ
* [hday] => ็ธๆช // ํ์ ์ผ์ง ๊ฐ
* )
*/
print_r ($lunar->dayfortune ('2013-07-16'));
/*
* 7์ 1์ผ ๋ถํฐ 30์ผ ๊น์ง์ ์ผ์ง์ ๊ตฌํ ๊ฒฝ์ฐ
* ๋ค์์ ์์ฃผ ์์ข์ ๋ฐฉ๋ฒ์ด๋ค.
*/
for ( $i=1; $i<31; $i++ ) {
$r = $lunar->dayfortune ('2013-07-' . $i);
$iljin[$i] = $r->day;
}
/*
* ์์ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ด $lunar->ganji_ref method๋ฅผ ์ด์ฉํ์ฌ
* ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
*/
$r = $lunar->dayfortune ('2013-07-01');
$iljin[$i] = $r->day;
$gindex = $r->data->d;
for ( $i=2; $i<31; $i++ ) {
$gindex++;
if ( $gindex >= 60 )
$gindex -= 60;
$iljin[$i] = $lunar->ganji_ref[$gindex];
}
/*
* $lunar->s28day ($date)
*
* input:
* 2013-07-16 or
* 2013-7-16 or
* 20130716 or
* 1373900400 or
* NULL
*
* output:
* stdClass Object
* (
* [data] => 5
* [k] => ๋ฏธ
* [h] => ๅฐพ
* )
*/
print_r ($lunar->s28day ('2013-07-16'));
/*
* ์ญ์ 7/1 ๋ถํฐ 7/30 ๊น์ง์ ์ผ์ง์ ๊ตฌํ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด
* ํ๋ฉด ์ฑ๋ฅ์ด ๋งค์ฐ ์ข์์ง๋ค.
*/
$s28 = null;
for ( $i=0; $i<30; $i++ ) {
if ( $s28 === null )
$s28 = $lunar->s28day ('2013-07-01');
else
$s28 = $lunar->s28day ($s28);
$s28v[$i] = $s28->k;
}
/*
* $lunar->seasondate ($date)
*
* input:
* 2013-07-16 or
* 2013-7-16 or
* 20130716 or
* 1373900400 or
* NULL
*
* output:
* stdClass Object
* (
* [center] => stdClass Object
* (
* [name] => ์์
* [hname] => ๅฐๆ
* [hyear] => AD 2013
* [year] => 2013
* [month] => 7
* [day] => 7
* [hour] => 7
* [min] => 49
* )
*
* [ccenter] => stdClass Object
* (
* [name] => ๋์
* [hname] => ๅคงๆ
* [hyear] => AD 2013
* [year] => 2013
* [month] => 7
* [day] => 23
* [hour] => 1
* [min] => 11
* )
*
* [nenter] => stdClass Object
* (
* [name] => ์
์ถ
* [hname] => ๏งท็ง
* [hyear] => AD 2013
* [year] => 2013
* [month] => 8
* [day] => 7
* [hour] => 17
* [min] => 36
* )
* )
*/
print_r ($lunar->seasondate ('2013-07-16'));
/*
* $lunar->moonstatus ($date)
*
* input:
* 2013-07-16 or
* 2013-7-16 or
* 20130716 or
* 1373900400 or
* NULL
*
* output:
* stdClass Object
* (
* [new] => stdClass Object
* (
* [hyear] => AD 2013
* [year] => 2013
* [month] => 7
* [day] => 8
* [hour] => 16
* [min] => 15
* )
*
* [full] => stdClass Object
* (
* [hyear] => AD 2013
* [year] => 2013
* [month] => 7
* [day] => 23
* [hour] => 2
* [min] => 59
* )
* )
*/
print_r ($lunar->moonstatus ('2013-07-01'));
/*
* ํฉ์ญ/๋ง ์ ๋ณด์ ๊ฒฝ์ฐ, ํ๋ฌ์ ์๋ ฅ์์ด 2๊ฐ๊ฐ ์์ผ๋ฏ๋ก,
* 1์ผ์ ์ ๋ณด๋ง ์ป์ด์๋ ํฉ์ญ/๋ง ์ค์ 1๊ฐ์ ์ ๋ณด๋ง ๋์ฌ ์ ์๋ค.
* ๊ทธ๋ฌ๋ฏ๋ก, 1์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ๋ค์, ์๋ ฅ 1์ผ์ ์ ๋ณด๊น์ง ๊ตฌํ๋ฉด
* ํ๋ฌ์ ํฉ์ญ/๋ง ์ ๋ณด๋ฅผ ๋ชจ๋ ํํํ ์ ์๋ค.
*/
$lun = $lunar->tolunar ('2013-07-01');
if ( $lun->largemonth ) // ํ๋ฌ์ ๊ฒฝ์ฐ ๋ง์ง๋ง์ด 29์ผ์ด๊ณ ํฐ๋ฌ์ 30์ผ์ด๋ค.
$plus = 29 - $lun->day;
else
$plus = 30 - $lun->day;
$r1 = $lunar->moonstatus ('2013-07-01'); // ์๋ ฅ 2013-05-23
$r2 = $lunar->moonstatus ('2013-07-' . 1 + $plus); // ์๋ ฅ 2013-06-01
print_r ($r1);
print_r ($r2);
?>