양음력 달력변환함수(띠, 요일, 간지 포함)

/***********************************************************************
*
* 작은달:1, 큰달:2, 평달(소)+윤달(소):3, 평달(소)+윤달(대):4,
* 평달(대)+윤달(소):5, 평달(대)+윤달(대):6
*
* 호출법: soltolun(2002,01,11) 또는 luntosol(2001,02,15,true)
************************************************************************/
$startyear = 1841;
$endyear = 2043;

$hganarray = array(“甲”,”乙”,”丙”,”丁”,”戊”,”己”,”庚”,”辛”,”壬”,”癸”);
$hjiarray = array(“子”,”丑”,”寅”,”卯”,”辰”,”巳”,”午”,”未”,”申”,”酉”,”戌”,”亥”);
$kganarray = array(“갑”,”을”,”병”,”정”,”무”,”기”,”경”,”신”,”임”,”계”);
$kjiarray = array(“자”,”축”,”인”,”묘”,”진”,”사”,”오”,”미”,”신”,”유”,”술”,”해”);
$kddiarray = array(“쥐”,”소”,”호랑이”,”토끼”,”용”,”뱀”,”말”,”양”,”원숭이”,”닭”,”개”,”돼지”);
$kweekarray = array(“일”,”월”,”화”,”수”,”목”,”금”,”일”);
$moflastday = array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$yeararray = array(12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
$dbarray = array (
1,2,4,1,1,2,1,2,1,2,2,1, 2,2,1,2,1,1,2,1,2,1,2,1, 2,2,2,1,2,1,4,1,2,1,2,1, 2,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,2,1,2,1,2,1,2,1,
2,1,2,1,5,2,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,3,2,1,2,1,2,1,2,2, 2,1,2,1,1,2,1,1,2,2,1,2,
2,2,1,2,1,1,2,1,2,1,5,2, 2,1,2,2,1,1,2,1,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,5,2,1,2,1,2, 1,1,2,1,2,2,1,2,2,1,2,1,
2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,5,2,1,2,1,2,2,2, 1,2,1,1,2,1,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,1,2,2, 2,1,6,1,1,2,1,1,2,1,2,2,
1,2,2,1,2,1,2,1,2,1,1,2, 2,1,2,1,2,2,1,2,2,3,1,2, 1,2,2,1,2,1,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,4,1,2,2,1,2,2,1,
2,1,1,2,1,1,2,2,1,2,2,2, 1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,3,2,1,1,2,1,2,2,1, 2,2,2,1,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,5,2,1,
2,2,1,2,2,1,2,1,2,1,1,2, 1,2,1,2,2,1,2,1,2,2,1,2, 1,1,2,1,2,4,2,1,2,2,1,2, 1,1,2,1,2,1,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1,
2,2,1,1,5,1,2,1,2,2,1,2, 2,2,1,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1, 2,2,4,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,2,1,2,1,1,2,
1,2,1,2,1,2,5,2,2,1,2,1, 1,2,1,2,1,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2, 2,1,1,2,3,2,1,2,2,1,2,2, 2,1,1,2,1,1,2,1,2,1,2,2,
2,1,2,1,2,1,1,2,1,2,1,2, 2,2,1,5,2,1,1,2,1,2,1,2, 2,1,2,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,1,2,1,2,1,2, 1,5,2,1,2,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,2,1,2,2, 1,1,2,1,1,5,2,2,1,2,2,2, 1,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,5,1,2,1,2,1,2,1,
2,2,2,1,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,2,1,2,1,2,1, 2,1,5,2,2,1,2,1,2,1,2,1, 2,1,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,5,2,2,1,2,
1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,3,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,2,1,2,
1,2,2,4,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,2,1,2,1,2,2,1,2, 1,5,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1,
2,1,2,1,1,5,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,1,2, 2,2,1,2,5,1,2,1,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,2,1,2,1,2,1, 2,3,2,1,2,2,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,5,2,2,1,2,2, 1,2,1,1,2,1,1,2,2,1,2,2,
2,1,2,1,1,2,1,1,2,1,2,2, 2,1,2,2,3,2,1,1,2,1,2,2, 1,2,2,1,2,1,2,1,2,1,1,2, 2,1,2,1,2,2,1,2,1,2,1,1, 2,1,2,5,2,1,2,2,1,2,1,2,
1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,1,2,1,2,2,1,2,2, 1,5,1,2,1,1,2,2,1,2,2,2, 1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,1,1,5,1,2,1,2,2,1,
2,2,2,1,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,2,1,2, 1,2,2,1,6,1,2,1,2,1,1,2, 1,2,1,2,2,1,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1,
2,1,4,1,2,1,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1, 2,2,1,1,2,1,4,1,2,2,1,2, 2,2,1,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1,
2,2,1,2,2,4,1,1,2,1,2,1, 2,1,2,2,1,2,2,1,2,1,1,2, 1,2,1,2,1,2,2,1,2,2,1,2, 1,1,2,4,1,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2,
2,1,1,2,1,1,2,1,2,2,1,2, 2,5,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,3,2,1,2,1,2, 2,1,2,2,1,2,1,1,2,1,2,1,
2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,4,2,1,2,1,2,1,2, 1,2,1,1,2,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,1,2,2, 2,1,4,1,1,2,1,2,1,2,2,2,
1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,5,2,1,2,2, 1,2,2,1,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,5,2,1,2,1,2,1,
2,1,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,2,1,2,2,1, 2,1,2,3,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,1,2,2,1,
2,2,5,2,1,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,5,2,1,2,1,2, 1,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,2,1,2,1,2,2,1,2,
1,2,1,1,5,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,1,2,2,2,1, 2,2,1,5,1,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,1,2,
2,2,1,2,1,2,1,5,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,1, 2,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,1,6,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,1,2,2,
1,2,1,1,2,1,1,2,2,1,2,2, 2,1,2,3,2,1,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,1,2,2, 2,1,2,2,1,1,2,1,1,5,2,2, 1,2,2,1,2,1,2,1,1,2,1,2,
1,2,2,1,2,2,1,2,1,2,1,1, 2,1,2,2,1,5,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,1,2,1,2,2,1,2,2, 1,2,1,1,5,1,2,1,2,2,2,2,
1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,1,1,2,1,1,2,1,2,2, 1,2,5,2,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,2,1,2, 1,2,2,1,2,2,1,5,2,1,1,2,
1,2,1,2,2,1,2,1,2,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,3,2,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1, 2,2,1,1,2,1,1,2,1,2,2,1,
2,2,2,3,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1, 2,2,1,2,2,1,2,1,1,2,1,2, 1,5,2,2,1,2,1,2,2,1,1,2, 1,2,1,2,1,2,2,1,2,2,1,2,
1,1,2,1,2,1,5,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2, 2,1,1,2,1,1,2,1,2,2,1,2, 2,2,1,1,5,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2,
2,1,2,2,1,2,1,1,2,1,2,1, 2,1,6,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,5,2,1,2, 1,2,1,1,2,1,2,2,2,1,2,2,
1,1,2,1,1,2,1,2,2,1,2,2, 2,1,1,2,3,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2, 2,1,2,5,2,1,1,2,1,2,1,2,
1,2,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,2,1,2,1,2,1,2, 1,5,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,2,1,2,2,1, 2,1,2,1,1,5,2,1,2,2,2,1,
2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,1,2,2,2, 1,2,2,1,5,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,1,2,2, 1,2,1,2,2,1,2,1,2,1,2,1,
2,1,5,2,1,2,2,1,2,1,2,1, 2,1,1,2,1,2,2,1,2,2,1,2, 1,2,1,1,2,1,5,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,1,2,2,1,2,
2,2,1,2,1,4,1,1,2,1,2,2, 2,2,1,2,1,1,2,1,1,2,1,2, 2,2,1,2,1,2,1,2,1,1,2,1, 2,2,1,2,5,2,1,2,1,2,1,1, 2,1,2,2,1,2,2,1,2,1,2,1,
2,1,1,2,1,2,2,1,2,2,1,2, 1,5,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,1,2,2,1,2,2);

function febdays($smonth) {
if(($smonth%100 != 0 && $smonth%4 ==0) || $smonth%400 ==0) $moflastday[1] = 29;
else $moflastday[1] = 28;
return $moflastday[1];
}

function alltoday($syear) {
global $moflastday;
global $startyear;
$totalday -= 22;
for($step=$startyear;$step<=$syear-1;$step++) {
$moflastday[1] = febdays($step);
$totalmonthday = array_sum($moflastday);
$totalday += $totalmonthday;
}
return $totalday;
}

function numformat($integer) {
return sprintf(“%02d”, $integer);
}

function soltolun($syear, $smonth, $sday) {

global $startyear,$endyear,$hganarray,$hjiarray,$kganarray,$kjiarray;
global $kddiarray,$kweekarray,$moflastday,$yeararray,$dbarray;

if($syear < 1842 || $syear > 2040) return false;

$totaldate = $syear.numformat($smonth).numformat($sday);
if($totaldate > 20440130 || $totaldate < 18410123) return false;
$totalday = alltoday($syear);
$moflastday[1] = febdays($syear);

for($tempmonth=0;$tempmonth<$smonth-1;$tempmonth++) $totalday += $moflastday[$tempmonth];
$totalday += $sday;

$dbindex = 0;
$temptotalday = $totalday;

while(1) {
if($dbarray[$dbindex] == 1) {
$moflastdaylun = 29;
$leap = false;
}
else if($dbarray[$dbindex] == 2) {
$moflastdaylun = 30;
$leap = false;
}
else if($dbarray[$dbindex] == 3) {
$moflastdaylun = 29;
$moflastdayleap = 29;
$leap = true;
if($temptotalday > 29) $temptotalday -= 29;
}
else if($dbarray[$dbindex] == 4) {
$moflastdaylun = 29;
$moflastdayleap = 30;
$leap = true;
if($temptotalday > 30) $temptotalday -= 30;
}
else if($dbarray[$dbindex] == 5) {
$moflastdaylun = 30;
$moflastdayleap = 29;
$leap = true;
if($temptotalday > 29) $temptotalday -= 29;
}
else if($dbarray[$dbindex] == 6) {
$moflastdaylun = 30;
$moflastdayleap = 30;
$leap = true;
if($temptotalday > 30) $temptotalday -= 30;
}
$temptotalday -= $moflastdaylun;
$dbindex++;
$lyear = floor($dbindex/12);
if($temptotalday <= 0) break;
}
if($leap) $temptotalday += $moflastdayleap;
else $temptotalday +=$moflastdaylun;

$lyear += $startyear;
$lmonth = $yeararray[$dbindex%12];
$lday = $temptotalday;
$a = ($lyear + 6) % 10;
$b = ($lyear + 8) % 12;
$c = ($totalday + 2) % 10;
$d = ($totalday + 10) % 12;
$e = ($totalday + 5) % 7;

/* output */
$myarray[“year”] = $lyear;
$myarray[“month”] = $lmonth;
$myarray[“day”] = $lday;
$myarray[“yhgan”] = $hganarray[$a];
$myarray[“ykgan”] = $kganarray[$a];
$myarray[“yhji”] = $hjiarray[$b];
$myarray[“ykji”] = $kjiarray[$b];
$myarray[“kddi”] = $kddiarray[$b];
$myarray[“dhgan”] = $hganarray[$c];
$myarray[“dkgan”] = $kganarray[$c];
$myarray[“dhji”] = $hjiarray[$d];
$myarray[“dkji”] = $kjiarray[$d];
$myarray[“week”] = $kweekarray[$e];
$myarray[“leap”] = $leap;
return $myarray;
}

function luntosol($lyear, $lmonth, $lday, $leap=”) {

global $startyear,$endyear,$hganarray,$hjiarray,$kganarray,$kjiarray;
global $kddiarray,$kweekarray,$moflastday,$yeararray,$dbarray;

if($lyear < 1842 || $lyear > 2040) return false;

if($lyear > $endyear || $lyear < $startyear) return false; $temptotalday = 0;
$dbindex = ($lyear – $startyear) * 12 + ($lmonth – 1) – 1;
for($step=$dbindex;$step>=0;$step–) {
if($dbarray[$step] == 1) $temptotalday += 29;
else if($dbarray[$step] == 2) $temptotalday += 30;
else if($dbarray[$step] == 3) $temptotalday += 58;
else if($dbarray[$step] == 4) $temptotalday += 59;
else if($dbarray[$step] == 5) $temptotalday += 59;
else if($dbarray[$step] == 6) $temptotalday += 60;
}

$dbindex = ($lyear – $startyear) * 12 + ($lmonth) -1;
if($leap) {
if($dbarray[$dbindex] == 3 || $dbarray[$dbindex] == 4) $temptotalday += 29;
else if($dbarray[$dbindex] == 5 || $dbarray[$dbindex] == 6) $temptotalday += 30;
}

$temptotalday += $lday + 22;
$totalday = $temptotalday;
$tempyear = $startyear;

while(1) {
$moflastday[1] = febdays($tempyear);
for($tempmonth=0;$tempmonth<12;$tempmonth++) {
$temptotalday -= $moflastday[$tempmonth];
if($temptotalday <= 0) {
$temptotalday += $moflastday[$tempmonth];
$tempday = $temptotalday;
break 2;
}
}
$tempyear++;
}

$syear = $tempyear;
$smonth = $tempmonth + 1;
$sday = $tempday;
$a = ($lyear+6) % 10;
$b = ($lyear+8) % 12;
$c = $totalday % 10;
$d = $totalday % 12;
$e = ($totalday+4) % 7;

/* output */
$myarray[“year”] = $syear;
$myarray[“month”] = $smonth;
$myarray[“day”] = $sday;
$myarray[“yhgan”] = $hganarray[$a];
$myarray[“ykgan”] = $kganarray[$a];
$myarray[“yhji”] = $hjiarray[$b];
$myarray[“ykji”] = $kjiarray[$b];
$myarray[“kddi”] = $kddiarray[$b];
$myarray[“dhgan”] = $hganarray[$c];
$myarray[“dkgan”] = $kganarray[$c];
$myarray[“dhji”] = $hjiarray[$d];
$myarray[“dkji”] = $kjiarray[$d];
$myarray[“week”] = $kweekarray[$e];
$myarray[“leap”] = $leap;
return $myarray;
}
?>