Web/PHP
양력,음력변환
aucd29
2013. 9. 26. 21:37
<?
function moon($syear,$smonth,$sday)
{
$m[ 0] = 31;
$m[ 1] = 0 ;
$m[ 2] = 31;
$m[ 3] = 30;
$m[ 4] = 31;
$m[ 5] = 30;
$m[ 6] = 31;
$m[ 7] = 31;
$m[ 8] = 30;
$m[ 9] = 31;
$m[10] = 30;
$m[11] = 31;
$kk=
"1212122322121,1212121221220,1121121222120,2112132122122,2112112121220,2121211212120,2212321121212,2122121121210,2122121212120,1232122121212,".
"1212121221220,1121123221222,1121121212220,1212112121220,2121231212121,2221211212120,1221212121210,2123221212121,2121212212120,1211212232212,".
"1211212122210,2121121212220,1212132112212,2212112112210,2212211212120,1221412121212,1212122121210,2112212122120,1231212122212,1211212122210,".
"2121123122122,2121121122120,2212112112120,2212231212112,2122121212120,1212122121210,2132122122121,2112121222120,1211212322122,1211211221220,".
"2121121121220,2122132112122,1221212121120,2121221212110,2122321221212,1121212212210,2112121221220,1231211221222,1211211212220,1221123121221,".
"2221121121210,2221212112120,1221241212112,1212212212120,1121212212210,2114121212221,2112112122210,2211211412212,2211211212120,2212121121210,".
"2212214112121,2122122121120,1212122122120,1121412122122,1121121222120,2112112122120,2231211212122,2121211212120,2212121321212,2122121121210,".
"2122121212120,1212142121212,1211221221220,1121121221220,2114112121222,1212112121220,2121211232122,1221211212120,1221212121210,2121223212121,".
"2121212212120,1211212212210,2121321212221,2121121212220,1212112112210,2223211211221,2212211212120,1221212321212,1212122121210,2112212122120,".
"1211232122212,1211212122210,2121121122210,2212312112212,2212112112120,2212121232112,2122121212110,2212122121210,2112124122121,2112121221220,".
"1211211221220,2121321122122,2121121121220,2122112112322,1221212112120,1221221212110,2122123221212,1121212212210,2112121221220,1211231212222,".
"1211211212220,1221121121220,1223212112121,2221212112120,1221221232112,1212212122120,1121212212210,2112132212221,2112112122210,2211211212210,".
"2221321121212,2212121121210,2212212112120,1232212122112,1212122122120,1121212322122,1121121222120,2112112122120,2211231212122,2121211212120,".
"2122121121210,2124212112121,2122121212120,1212121223212,1211212221220,1121121221220,2112132121222,1212112121220,2121211212120,2122321121212,".
"1221212121210,2121221212120,1232121221212,1211212212210,2121123212221,2121121212220,1212112112220,1221231211221,2212211211220,1212212121210,".
"2123212212121,2112122122120,1211212322212,1211212122210,2121121122120,2212114112122,2212112112120,2212121211210,2212232121211,2122122121210";
for($i=0; $i<160; $i++) {
$dt[$i] = 0;
for($j=0; $j<12; $j++) {
if ($kk[$i*14+$j]=='1'||$kk[$i*14+$j]=='3') $dt[$i] = $dt[$i] + 29;
if ($kk[$i*14+$j]=='2'||$kk[$i*14+$j]=='4') $dt[$i] = $dt[$i] + 30;
}
if ($kk[$i*14+12]=='1'||$kk[$i*14+$j]=='3') $dt[$i] = $dt[$i] + 29;
if ($kk[$i*14+12]=='2'||$kk[$i*14+$j]=='4') $dt[$i] = $dt[$i] + 30;
}
/* 1. 1. 1. - 1910. 2. 10. */
$td1 = 1880*365 + 1880/4 - 1880/100 + 1880/400 + 30;
// printf("%d %d %d <BR>",$syear,$smonth, $sday);
/* ## 1. 1. 1. - $syear. $smonth. $sday. ## */
$k11 = $syear-1;
$td2 = $k11*365 + $k11/4 - $k11/100 + $k11/400;
$ll = $syear%400==0 || $syear%100!=0 && $syear%4==0;
if($ll) $m[1] = 29;
else $m[1] = 28;
for($i=0; $i<$smonth-1; $i++) $td2 = $td2 + $m[$i];
$td2 = $td2 + $sday;
/* ## 1881. 1. 30. - $syear. $smonth. $sday. ## */
$td = $td2 - $td1 + 1;
/* ## Lunar Year Caculation ## */
$td0 = $dt[0];
for($i=0; $i<163; $i++) {
if( $td <= $td0 ) break;
$td0 = $td0 + $dt[$i+1];
}
$lyear = $i + 1881; /* Calculated Lunar Year */
/* ## Lunar Month Calculation ## */
$td0 = $td0 - $dt[$i];
$td = $td - $td0;
if($kk[$i*14+12] != '0') $jcount = 13;
else $jcount = 12;
$m2 = 0;
for($j=0; $j<$jcount; $j++) {
if( $kk[$i*14+$j] <='2' ) $m2++;
if( $kk[$i*14+$j] <='2' ) $m1 = $kk[$i*14+$j]-'0' + 28;
else $m1 = $kk[$i*14+$j]-'0' + 26;
if( $td <= $m1 ) break;
$td = $td - $m1;
}
$m0 = $j;
$lmonth = $m2; /* Calculated Lunar Month */
$lday = $td; /* Calculated Lunar Day */
$i = ($td2+4) % 10;
$j = ($td2+2) % 12;
$i1 = ($lyear+6) % 10;
$j1 = ($lyear+8) % 12;
$yun="";
if( $kk[($lyear-1881)*14+12] != '0' && $kk[($lyear-1881)*14+m0] > '2' ) $yun="윤년";
$outbuff=sprintf("%d-%02d-%02d",$lyear, $lmonth, $lday);
return($outbuff);
}
?>
function moon($syear,$smonth,$sday)
{
$m[ 0] = 31;
$m[ 1] = 0 ;
$m[ 2] = 31;
$m[ 3] = 30;
$m[ 4] = 31;
$m[ 5] = 30;
$m[ 6] = 31;
$m[ 7] = 31;
$m[ 8] = 30;
$m[ 9] = 31;
$m[10] = 30;
$m[11] = 31;
$kk=
"1212122322121,1212121221220,1121121222120,2112132122122,2112112121220,2121211212120,2212321121212,2122121121210,2122121212120,1232122121212,".
"1212121221220,1121123221222,1121121212220,1212112121220,2121231212121,2221211212120,1221212121210,2123221212121,2121212212120,1211212232212,".
"1211212122210,2121121212220,1212132112212,2212112112210,2212211212120,1221412121212,1212122121210,2112212122120,1231212122212,1211212122210,".
"2121123122122,2121121122120,2212112112120,2212231212112,2122121212120,1212122121210,2132122122121,2112121222120,1211212322122,1211211221220,".
"2121121121220,2122132112122,1221212121120,2121221212110,2122321221212,1121212212210,2112121221220,1231211221222,1211211212220,1221123121221,".
"2221121121210,2221212112120,1221241212112,1212212212120,1121212212210,2114121212221,2112112122210,2211211412212,2211211212120,2212121121210,".
"2212214112121,2122122121120,1212122122120,1121412122122,1121121222120,2112112122120,2231211212122,2121211212120,2212121321212,2122121121210,".
"2122121212120,1212142121212,1211221221220,1121121221220,2114112121222,1212112121220,2121211232122,1221211212120,1221212121210,2121223212121,".
"2121212212120,1211212212210,2121321212221,2121121212220,1212112112210,2223211211221,2212211212120,1221212321212,1212122121210,2112212122120,".
"1211232122212,1211212122210,2121121122210,2212312112212,2212112112120,2212121232112,2122121212110,2212122121210,2112124122121,2112121221220,".
"1211211221220,2121321122122,2121121121220,2122112112322,1221212112120,1221221212110,2122123221212,1121212212210,2112121221220,1211231212222,".
"1211211212220,1221121121220,1223212112121,2221212112120,1221221232112,1212212122120,1121212212210,2112132212221,2112112122210,2211211212210,".
"2221321121212,2212121121210,2212212112120,1232212122112,1212122122120,1121212322122,1121121222120,2112112122120,2211231212122,2121211212120,".
"2122121121210,2124212112121,2122121212120,1212121223212,1211212221220,1121121221220,2112132121222,1212112121220,2121211212120,2122321121212,".
"1221212121210,2121221212120,1232121221212,1211212212210,2121123212221,2121121212220,1212112112220,1221231211221,2212211211220,1212212121210,".
"2123212212121,2112122122120,1211212322212,1211212122210,2121121122120,2212114112122,2212112112120,2212121211210,2212232121211,2122122121210";
for($i=0; $i<160; $i++) {
$dt[$i] = 0;
for($j=0; $j<12; $j++) {
if ($kk[$i*14+$j]=='1'||$kk[$i*14+$j]=='3') $dt[$i] = $dt[$i] + 29;
if ($kk[$i*14+$j]=='2'||$kk[$i*14+$j]=='4') $dt[$i] = $dt[$i] + 30;
}
if ($kk[$i*14+12]=='1'||$kk[$i*14+$j]=='3') $dt[$i] = $dt[$i] + 29;
if ($kk[$i*14+12]=='2'||$kk[$i*14+$j]=='4') $dt[$i] = $dt[$i] + 30;
}
/* 1. 1. 1. - 1910. 2. 10. */
$td1 = 1880*365 + 1880/4 - 1880/100 + 1880/400 + 30;
// printf("%d %d %d <BR>",$syear,$smonth, $sday);
/* ## 1. 1. 1. - $syear. $smonth. $sday. ## */
$k11 = $syear-1;
$td2 = $k11*365 + $k11/4 - $k11/100 + $k11/400;
$ll = $syear%400==0 || $syear%100!=0 && $syear%4==0;
if($ll) $m[1] = 29;
else $m[1] = 28;
for($i=0; $i<$smonth-1; $i++) $td2 = $td2 + $m[$i];
$td2 = $td2 + $sday;
/* ## 1881. 1. 30. - $syear. $smonth. $sday. ## */
$td = $td2 - $td1 + 1;
/* ## Lunar Year Caculation ## */
$td0 = $dt[0];
for($i=0; $i<163; $i++) {
if( $td <= $td0 ) break;
$td0 = $td0 + $dt[$i+1];
}
$lyear = $i + 1881; /* Calculated Lunar Year */
/* ## Lunar Month Calculation ## */
$td0 = $td0 - $dt[$i];
$td = $td - $td0;
if($kk[$i*14+12] != '0') $jcount = 13;
else $jcount = 12;
$m2 = 0;
for($j=0; $j<$jcount; $j++) {
if( $kk[$i*14+$j] <='2' ) $m2++;
if( $kk[$i*14+$j] <='2' ) $m1 = $kk[$i*14+$j]-'0' + 28;
else $m1 = $kk[$i*14+$j]-'0' + 26;
if( $td <= $m1 ) break;
$td = $td - $m1;
}
$m0 = $j;
$lmonth = $m2; /* Calculated Lunar Month */
$lday = $td; /* Calculated Lunar Day */
$i = ($td2+4) % 10;
$j = ($td2+2) % 12;
$i1 = ($lyear+6) % 10;
$j1 = ($lyear+8) % 12;
$yun="";
if( $kk[($lyear-1881)*14+12] != '0' && $kk[($lyear-1881)*14+m0] > '2' ) $yun="윤년";
$outbuff=sprintf("%d-%02d-%02d",$lyear, $lmonth, $lday);
return($outbuff);
}
?>