-
- /*
- * 农历 节气 节日
- * 편집: bbs.it-home.org
- */
-
- class Lunar {
- var $MIN_YEAR = 1891;
- var $MAX_YEAR = 2100;
- var $lunarInfo = 배열(
- 배열(0,2,9,21936), 배열(6,1,30,9656), 배열(0,2,17,9584), 배열(0,2 ,6,21168),배열(5,1,26,43344),배열(0,2,13,59728),
- 배열(0,2,2,27296),배열(3,1,22, 44368),배열(0,2,10,43856),배열(8,1,30,19304),배열(0,2,19,19168),배열(0,2,8,42352),
- 배열(5,1,29,21096), 배열(0,2,16,53856), 배열(0,2,4,55632), 배열(4,1,25,27304), 배열(0,2, 13,22176),배열(0,2,2,39632),
- 배열(2,1,22,19176),배열(0,2,10,19168),배열(6,1,30,42200 ),배열(0,2,18,42192),배열(0,2,6,53840),배열(5,1,26,54568),
- 배열(0,2,14,46400),배열 (0,2,3,54944), 배열(2,1,23,38608), 배열(0,2,11,38320), 배열(7,2,1,18872), 배열(0,2,20 ,18800),
- 배열(0,2,8,42160), 배열(5,1,28,45656), 배열(0,2,16,27216), 배열(0,2,5,27968) ,배열(4,1,24,44456),배열(0,2,13,11104),
- 배열(0,2,2,38256),배열(2,1,23,18808),배열( 0,2,10,18800), 배열(6,1,30,25776), 배열(0,2,17,54432), 배열(0,2,6,59984),
- 배열(5,1 ,26,27976), 배열(0,2,14,23248), 배열(0,2,4,11104), 배열(3,1,24,37744), 배열(0,2,11,37600), 배열(7,1,31,51560),
- 배열(0,2,19,51536), 배열(0,2,8,54432), 배열(6,1,27,55888), 배열(0 ,2,15,46416), 배열(0,2,5,22176), 배열(4,1,25,43736),
- 배열(0,2,13,9680), 배열(0,2, 2,37584), 배열(2,1,22,51544), 배열(0,2,10,43344), 배열(7,1,29,46248), 배열(0,2,17,27808),
- 배열(0,2,6,46416),배열(5,1,27,21928),배열(0,2,14,19872),배열(0,2,3,42416),배열(3, 1,24,21176), 배열(0,2,12,21168),
- 배열(8,1,31,43344), 배열(0,2,18,59728), 배열(0,2,8 ,27296),배열(6,1,28,44368),배열(0,2,15,43856),배열(0,2,5,19296),
- 배열(4,1,25,42352) ,배열(0,2,13,42352),배열(0,2,2,21088),배열(3,1,21,59696),배열(0,2,9,55632),배열(7,1 ,30,23208),
- 배열(0,2,17,22176), 배열(0,2,6,38608), 배열(5,1,27,19176), 배열(0,2,15, 19152),배열(0,2,3,42192),배열(4,1,23,53864),
- 배열(0,2,11,53840),배열(8,1,31,54568), 배열(0,2,18,46400), 배열(0,2,7,46752), 배열(6,1,28,38608), 배열(0,2,16,38320),
- 배열(0 ,2,5,18864), 배열(4,1,25,42168), 배열(0,2,13,42160), 배열(10,2,2,45656), 배열(0,2,20,27216 ),배열(0,2,9,27968),
- 배열(6,1,29,44448),배열(0,2,17,43872),배열(0,2,6,38256),배열 (5,1,27,18808), 배열(0,2,15,18800), 배열(0,2,4,25776),
- 배열(3,1,23,27216), 배열(0, 2,10,59984), 배열(8,1,31,27432), 배열(0,2,19,23232), 배열(0,2,7,43872), 배열(5,1,28,37736) ,
- 배열(0,2,16,37600), 배열(0,2,5,51552), 배열(4,1,24,54440), 배열(0,2,12,54432), 배열( 0,2,1,55888),배열(2,1,22,23208),
- 배열(0,2,9,22176),배열(7,1,29,43736),배열(0,2 ,18,9680), 배열(0,2,7,37584), 배열(5,1,26,51544), 배열(0,2,14,43344),
- 배열(0,2,3, 46240), 배열(4,1,23,46416), 배열(0,2,10,44368), 배열(9,1,31,21928), 배열(0,2,19,19360), 배열(0 ,2,8,42416),
- 배열(6,1,28,21176), 배열(0,2,16,21168), 배열(0,2,5,43312), 배열(4,1, 25,29864),배열(0,2,12,27296),배열(0,2,1,44368),
- 배열(2,1,22,19880),배열(0,2,10,19296) ),배열(6,1,29,42352),배열(0,2,17,42208),배열(0,2,6,53856),배열(5,1,26,59696),
- 배열 (0,2,13,54576), 배열(0,2,3,23200), 배열(3,1,23,27472), 배열(0,2,11,38608), 배열(11,1,31 ,19176),배열(0,2,19,19152),
- 배열(0,2,8,42192),배열(6,1,28,53848),배열(0,2,15,53840) ,배열(0,2,4,54560),배열(5,1,24,55968),배열(0,2,12,46496),
- 배열(0,2,1,22224),배열( 2,1,22,19160), 배열(0,2,10,18864), 배열(7,1,30,42168), 배열(0,2,17,42160), 배열(0,2,6, 43600),
- 배열(5,1,26,46376), 배열(0,2,14,27936), 배열(0,2,2,44448), 배열(3,1,23,21936), 배열(0,2,11,37744), 배열(8,2,1,18808),
- 배열(0,2,19,18800), 배열(0,2,8,25776), 배열(6 ,1,28,27216),배열(0,2,15,59984),배열(0,2,4,27424),배열(4,1,24,43872),
- 배열(0,2, 12,43744), 배열(0,2,2,37600), 배열(3,1,21,51568), 배열(0,2,9,51552), 배열(7,1,29,54440), 배열 (0,2,17,54432),
- 배열(0,2,5,55888), 배열(5,1,26,23208), 배열(0,2,14,22176), 배열(0, 2,3,42704), 배열(4,1,23,21224), 배열(0,2,11,21200),
- 배열(8,1,31,43352), 배열(0,2,19 ,43344), 배열(0,2,7,46240), 배열(6,1,27,46416), 배열(0,2,15,44368), 배열(0,2,5,21920),
- 배열(4,1,24,42448), 배열(0,2,12,42416), 배열(0,2,2,21168), 배열(3,1,22,43320), 배열(0,2 ,9,26928),배열(7,1,29,29336),
- 배열(0,2,17,27296),배열(0,2,6,44368),배열(5,1,26, 19880), 배열(0,2,14,19296), 배열(0,2,3,42352), 배열(4,1,24,21104),
- 배열(0,2,10,53856), 배열(8,1,30,59696), 배열(0,2,18,54560), 배열(0,2,7,55968), 배열(6,1,27,27472), 배열(0,2, 15,22224),
- 배열(0,2,5,19168), 배열(4,1,25,42216), 배열(0,2,12,42192), 배열(0,2,1,53584 ),배열(2,1,21,55592),배열(0,2,9,54560)
- );
- /**
- * 将阳历转换为阴历
- * @param year 公历-年
- * @param 월 날짜
- * @param 날짜 날짜
- */
- function ConvertSolarToLunar($year,$month,$date){
- //debugger;
- $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
- if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){
- return array(1891,'현재','새','준비',1 ,1 ,'兔');
- }
- return $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));
- }
-
- function ConvertSolarMonthToLunar($year,$month) {
- $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
- if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){
- return array(1891,'현재','새','준비',1 ,1 ,'兔');
- }
- $month_days_ary = 배열(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
- $dd = $month_days_year[$month];
- if($this->isLeapYear($year) && $month == 2) $dd ;
- $lunar_year = 배열();
- for ($i = 1; $i $array = $this-&getsLunarCityBetween($year,$this-getsDaysBetweenSolar($year, $month, $i, $ yearData[1], $yearData[2]));
- $array[] = $연도. '-' $월 . '-' $나는;
- $lunar_year[$i] = $배열;
- }
- $lunar_year를 반환합니다.
- }
- /**
- * 음력을 양력으로 변환
- * @param year lunar Calendar - 연도
- * @param Month lunar Calendar - 월, 윤달 처리: 예를 들어 5월에 윤달이 있는 경우 두 번째 5월은 6월로 전달되며 이는 음력 13개월에 해당하지만 때로는 13월의 일수가 0이 되는 경우도 있습니다.
- * @param date lunar Calendar-day
- */
- 함수 ConvertLunarToSolar($year,$month,$date){
- $yearData = $this->lunarInfo[$year-$this- ; >MY_YEAR];
- $between = $this->getDaysBetweenLunar($연도,$월,$날짜);
- $res = mktime(0,0,0,$yearData[1],$yearData[2],$year);
- $res = date('연월일', $res $between*24*60*60);
- $day = 폭발('-', $res);
- $년 = $day[0];
- $월= $day[1];
- $day = $day[2];
- 반환 배열($연도, $월, $일);
- }
- /**
- * 윤년인지 판단
- * @param year
- */
- 함수 isLeapYear($year){
- return(($year%4==0 && $year 0 !=0) ||( $ 연도@0==0));
- }
- /**
- * 줄기 및 분기 연도 가져오기
- * @param 연도
- */
- function getLunarYearName($year){
- $sky = array('sun','plant','sun','sun','甲', '그들', '그들', '그들', '그들', '그들');
- $earth = array('토지','값','물','사람','도시','도시','도시','도시','도시','도시','도시 ','未');
- $년 = $년.'';
- $sky[$year{3}].$earth[$year]를 반환합니다.
- }
- /**
- * 음력에 따른 별자리 구하기
- * @param year 음력
- */
- function getYearZodiac($year){
- $zodiac = array('base','value','base','base'鼠' ,'표시','연설','연설','연설','연설','연설','연설');
- $zodiac[$연도]를 반환합니다.
- }
- /**
- * 그레고리력 월의 일수 가져오기
- * @param year 그레고리오력-연도
- * @param Month 그레고리력-월
- */
- 함수 getSolarMonthDays($year,$month){
- $monthHash = array('1'=>31,'2'=> $this->isLeapYear($year)?29:28,'3'=>31,'4'=>30,'5'=>31,'6'=>30,'7 = >31,'8'=>31,'9'=>30,'10'=>31,'11'=>30,'12'=>31);
- return $monthHash["$month"];
- }
- /**
- * 음력 월의 일수 구하기
- * @param year lunar Calendar - 연도
- * @param Month lunar Calendar - 월, 1월부터 시작
- */
- 함수 getLunarMonthDays($year,$month){
- $monthData = $this->getLunarMonths($year);
- return $ MonthData [ $ 월 - 1 ] ;
- }
- /**
- * 음력 각 달의 날짜 배열 가져오기
- * @param year
- */
- 함수 getLunarMonths($year){
- $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
- $leapMonth = $yearData[0];
- $bit = decbin($yearData[3]);
- for ($i = 0; $i < str($bit);$i) {
- $bitArray[$i] = substr($bit, $i, 1);
- }
- for($k=0, $clan=16-count($bitArray);$c<$clan;$k){
- array_unshift($bitArray, '0');
- }
- $bitArray = array_slice($bitArray,0,($leapMonth==0?12:13));
- for($i=0; $i $bitArray[$i] = $bitArray[$i] 29;
- }
- $bitArray를 반환합니다.
- }
- /**
- * 각 음력의 일수를 구합니다
- * @param year 음력
- */
- 함수 getLunarYearDays($year){
- $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
- $monthArray = $this->getLunarYearMonths($year);
- $len = count($monthArray);
- return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);
- }
- function getLunarYearMonths($year){
- //debugger;
- $monthData = $this->getLunarMonths($년);
- $res=배열();
- $온도=0;
- $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
- $len = ($yearData[0]==0?12:13);
- for($i=0;$i<$len;$i ){
- $temp=0;
- for($j=0;$j<=$i;$j ){
- $temp =$monthData[$j];
- }
- array_push($res, $temp);
- }
- $res 반환;
- }
- /**
- * 윤달 받기
- * @param 년 음력
- */
- 함수 getLeapMonth($year){
- $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
- $yearData[0] 반환;
- }
- /**
- * 음력 날짜와 음력 1월 1일 사이의 일수 계산
- * @param year
- * @param Month
- * @param date
- */
- 함수 getDaysBetweenLunar($year,$month,$date){
- $yearMonth = $this->getLunarMonths($year);
- $res=0;
- for($i=1;$i<$month;$i ){
- $res =$yearMonth[$i-1];
- }
- $res =$date-1;
- $res를 반환합니다.
- }
- /**
- * 두 양력 날짜 사이의 일수를 계산합니다.
- * @param year 그레고리력 연도
- * @param cmonth
- * @param cdate
- * @param dmonth 해당하는 양력 월 음력 정월까지
- * @param ddate 음력 1일에 해당하는 양력 일수
- */
- 함수 getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){
- $a = mktime(0,0,0 ,$c월,$c날짜,$년);
- $b = mktime(0,0,0,$d월,$ddate,$년);
- return ceil(($a-$b)/24/3600);
- }
- /**
- * 음력 1월 1일부터 일수를 기준으로 음력 날짜 계산
- * @param year 그레고리오력
- * @param 날짜 간
- */
- function getLunarByBetween($year,$between){
- //debugger;
- $lunarArray = 배열();
- $yearMonth=배열();
- $t=0;
- $e=0;
- $leapMonth=0;
- $m='';
- if($between==0){
- array_push($lunarArray, $year,'정월','初一');
- $t = 1;
- $e = 1;
- }else{
- $연도 = $between>0? $연도: ($연도-1);
- $yearMonth = $this->getLunarYearMonths($년);
- $leapMonth = $this->getLeapMonth($년);
- $between = $between>0?$between : ($this->getLunarYearDays($year) $between);
- for($i=0;$i if($between==$yearMonth[$i]){
- $t=$i 2;
- $e=1;
- 휴식;
- }else if($between<$yearMonth[$i]){
- $t=$i 1;
- $e=$between-(emptyempty($yearMonth[$i-1])?0:$yearMonth[$i-1]) 1;
- 휴식;
- }
- }
- $m = ($leapMonth!=0&&$t==$leapMonth 1)?('闰'.$this->getCapitalNum($t- 1,true)): $this->getCapitalNum(($leapMonth!=0&&$leapMonth 1<$t?($t-1):$t),true);
- array_push($lunarArray,$year,$m,$this->getCapitalNum($e,false));
- }
- array_push($lunarArray,$this->getLunarYearName($year));// 天干地支
- array_push($lunarArray,$t,$e);
- array_push($lunarArray,$this->getYearZodiac($year));// 12주년
- array_push($lunarArray,$leapMonth);// 闰几月
- return $lunarArray;
- }
- /**
- * 숫자의 음력 이름 가져오기
- * @param num number
- * @param isMonth 해당 월의 숫자인지 여부
- */
- 함수 getCapitalNum($num,$isMonth){
- $isMonth = $isMonth || false
- $dateHash=array('0'=> '','1'=>'하나','2'=>'둘','3'=>'셋','4'=>'넷','5'=>' 다섯','6'=>'여섯','7'=>'일곱','8'=>'여덟','9'=>'아홉','10'=>' 10');
- $monthHash=array('0'=>'','1'=>'첫 번째 달','2'=>'2월','3'=>'3 월','4'=>'4월','5'=>'5월','6'=>'6월','7'=>'7월','8' =>' 8월','9'=>'9월','10'=>'10월','11'=>'겨울의 달','12'=>'십이월' )
- $ res='';
- if($isMonth){
- $res = $monthHash[$num]
- }else{
- if($num<=10) {
- $res = 'chu'.$dateHash[$num]
- }else if($num>10&&$num<20){
- $res = '十'.$dateHash[$num -10]; > }else if($num==20){
- $res = "20";
- }else if($num>20&&$num<30){
- $ res = "廿".$ dateHash[$num-20]
- }else if($num==30){
- $res = "thirty";
- }
- return $res; }
-
- /*
- * 절기에 대한 일반 알고리즘
- */
- 함수 getJieQi($_year,$month,$day)
- {
- $year = substr( $_year,-2) 0;
- $coefficient = array(
- array(5.4055,2019,-1),//Xiaohan
- array(20.12,2082,1), //큰 추위
- array(3.87),//봄의 시작
- array(18.74,2026,-1),//빗물
- array(5.63),//Jingzhe
- array(20.646,2084, 1) ,//춘분
- array(4.81),//청명
- array(20.1),//구우
- array(5.52,1911,1),//여름의 시작
- array( 21.04, 2008,1),//Xiaoman
- array(5.678,1902,1),//Mangzhong
- array(21.37,1928,1),//Summer Solstice
- array(7.108,2016, 1), //소더위
- 배열(22.83,1922,1),//대더위
- 배열(7.5,2002,1),//가을의 시작
- 배열(23.13),// 끝더위
- 배열(7.646 ,1927,1),//백이슬
- 배열(23.042,1942,1),//추분
- 배열(8.318),//냉이슬
- 배열 (23.438,2089,1),//Frostfall
- array(7.438,2089,1),//겨울의 시작
- array(22.36,1978,1),//Light snow
- array( 7.18,1954,1),//폭설
- array( 21.94,2021,-1)//동지
- )
- $term_name = array(
- "약간 추움", "큰 춥다', '봄의 시작', '비', '징저', '춘분', '청명', '곡물비',
- '여름의 시작', '샤오만', '곡물', '여름 Solstice', '소더위', '대더위', '가을의 시작', '더위의 끝',
- '흰 이슬', '추분', '찬 이슬', '서리강하', '시작' of Winter", "Light Snow", "Heavy Snow", "Winter Solstice");
-
- $idx1 = ($month-1)*2;
- $_leap_value = Floor(($year- 1)/4);
-
- $day1 = Floor($year*0.2422 $coefficient[$idx1][0])-$_leap_value
- if(isset ($coefficient[$idx1][1 ])&&$계수[$idx1][1]==$_year)
- {
- $day1 = $coefficient[$idx1][2]
- }
- $day2 = Floor($ year*0.2422 $coefficient[$idx1 1][0])-$_leap_value;
- if(isset($coefficient[$idx1 1][1])&&$coefficient[$ idx1 1][1]==$ _연도)
- {
- $day1 = $coefficient[$idx1 1][2]
- }
- //echo __FILE__.'->'. day1,',$day2='.$day2.'
'.chr(10)
- if($day==$day1) return $term_name [$idx1]
- if ($day==$day2) $term_name[$idx1 1] 반환
- '' 반환
- }
-
- /*
- * 축제 가져오기: 이 함수를 수정해야만 특별한 축제를 계산할 수 있습니다.
- */
- function getFestival($today, $nl_info = false,$config = 1)
- {
- if($config == 1)
- {
- $arr_lunar=array('01-01'=>'봄 축제','01-15'=>'등불 축제 ' ,'02-02'=>'2월 2일','05-05'=>'단오절','07-07'=>'칠석절','08-15'=> '중추절','09-09'=>'중9절','12-08'=>'라바 축제','12-23'=>'소년'); > $arr_solar= array('01-01'=>'설날','02-14'=>'발렌타인데이','03-12'=>'식목일','04-01 '=>'만우절','05-01'=>'노동절','06-01'=>'어린이날','10-01'=>'국경의 날','10 -31'=> '할로윈','12-24'=>'크리스마스 이브','12-25'=>'크리스마스')
- }//다른 공휴일을 사용하세요. $config, $arr_lunar 및 $arr_solar 구성
-
- $festivals = array()
-
- list($y,$m,$d) =explore('-',$today) );
- if (!$nl_info) $nl_info = $this->convertSolarToLunar($y,intval($m),intval($d))
-
- if($nl_info[7] >0&&$nl_info[ 7]<$nl_info[4]) $nl_info[4]-=1
- $md_lunar = substr('0'.$nl_info[4],-2).'-' .substr('0' .$nl_info[5],-2);
- $md_solar=substr_replace($today,'',0,5)
-
- isset($arr_lunar[$md_lunar] )?array_push($festivals , $arr_lunar[$md_lunar]):'';
- isset($arr_solar[$md_solar])?array_push($festivals, $arr_solar[$md_solar]):'';
- $glweek = date("w",strtotime($today)); //0-6
-
- if($m==5&&($d>7)&&($d<15) &&($glweek== 0))array_push($festivals, "어머니의 날")
- if($m==6&&($d>14)&&($d<22)&&($glweek==0 ))array_push($festivals ,"아버지의 날")
-
- $jieqi = $this->getJieQi($y,$m,$d)
- if($jieqi)array_push($ 축제,$jieqi);
- return implode('/',$festivals);
- }
- }
- header("Content-Type:text/html;charset =utf-8") ;
- $lunar=new Lunar();//
- $month=$lunar->convertSolarToLunar(2013,07,08);//양력을 음력으로 변환
- echo '
';
- print_r($month);
-
-
코드 복사
결과 인쇄:
정렬
(
[0] => 2013년
[1] => 5월
[2] => 30
[3] => 귀시
[4] => 5
[5] => 30
[6] => 뱀
[7] => 0
)
|