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);
}

?>