Home  >  Article  >  Backend Development  >  PHP通过新历获取农历日期的方法

PHP通过新历获取农历日期的方法

WBOY
WBOYOriginal
2016-06-20 13:05:232437browse

PHP通过新历获取农历日期的方法

<?php 
 
/* 
http://www.china-on-site.com/flexphpsite/ 
This function can return the date of Chinese lunar calendar which is corresponding to the Gregorian calendar. Range from Jan  1st,1901 to Feb 11th,2021. 
*/ 
 
function getchinesedate($year,$month,$day) 
 
{ 
 
    $cdate_monthdata=array( 
        0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1), 
        1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2), 
        2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3), 
        3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4), 
        4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5), 
        5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6), 
        6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7), 
        7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8), 
        8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9), 
        9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10), 
        10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11), 
        11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12), 
        12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1), 
        13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2), 
        14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3), 
        15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4), 
        16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5), 
        17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6), 
        18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7), 
        19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8), 
        20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9), 
        21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10), 
        22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11), 
        23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12), 
        24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1), 
        25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2), 
        26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3), 
        27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4), 
        28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5), 
        29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6), 
        30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7), 
        31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8), 
        32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9), 
        33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10), 
        34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11), 
        35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12), 
        36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1), 
        37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2), 
        38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3), 
        39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4), 
        40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5), 
        41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6), 
        42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7), 
        43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8), 
        44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9), 
        45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10), 
        46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11), 
        47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12), 
        48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1), 
        49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2), 
        50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3), 
        51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4), 
        52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5), 
        53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6), 
        54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7), 
        55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8), 
        56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9), 
        57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10), 
        58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11), 
        59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12), 
        60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1), 
        61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2), 
        62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3), 
        63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4), 
        64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5), 
        65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6), 
        66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7), 
        67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8), 
        68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9), 
        69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10), 
        70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11), 
        71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12), 
        72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1), 
        73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2), 
        74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3), 
        75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4), 
        76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5), 
        77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6), 
        78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7), 
        79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8), 
        80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9), 
        81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10), 
        82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11), 
        83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12), 
        84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1), 
        85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2), 
        86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3), 
        87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4), 
        88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5), 
        89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6), 
        90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7), 
        91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8), 
        92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9), 
        93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10), 
        94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11), 
        95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12), 
        96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1), 
        97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2), 
        98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3), 
        99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4), 
        100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5), 
        101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6), 
        102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7), 
        103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8), 
        104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9), 
        105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10), 
        106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11), 
        107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12), 
        108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1), 
        109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2), 
        110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3), 
        111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4), 
        112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5), 
        113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6), 
        114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7), 
        115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8), 
        116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9), 
        117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10), 
        118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11), 
        119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12), 
        120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1) 
    ); 
 
    $cdate_tianganarray=array("null","Jia","Yi","Bing","Ding","Wu","Ji","Geng","Xin","Ren","Kui"); 
 
    $cdate_dizhiarray=array("null","Zi","Chou","Yin","Mao","Chen","Si","Wu","Wei","Shen","You","Xu","Hai"); 
 
    $cdate_zodiacarray=array("null","Rat","Ox","Tiger","Rabbit","Dragon","Snake","Horse","Sheep","Monkey","Rooster","Dog","Pig"); 
 
    $cdate_total=11; 
    $cdate_cntotal=0; 
 
 
 
    for ($y=1901;$y<$year;$y++){ 
        $cdate_total+=365; 
        if ($y%4==0) $cdate_total ++; 
    } 
 
    switch ($month){ 
        case 12: 
            $cdate_total+=30; 
        case 11: 
            $cdate_total+=31; 
        case 10: 
            $cdate_total+=30; 
        case 9: 
            $cdate_total+=31; 
        case 8: 
            $cdate_total+=31; 
        case 7: 
            $cdate_total+=30; 
        case 6: 
            $cdate_total+=31; 
        case 5: 
            $cdate_total+=30; 
        case 4: 
            $cdate_total+=31; 
        case 3: 
            $cdate_total+=28; 
        case 2: 
            $cdate_total+=31; 
    } 
 
    if ($year%4==0 and $month>2){ 
        $cdate_total++; 
    } 
 
    $cdate_total = $cdate_total+($day-1); 
 
    $myeardiff = $year-1900; 
 
    for ($x=0;$x<=$myeardiff;$x++){ 
        for ($y=1;$y<=13;$y++){ 
            if ($cdate_cntotal<$cdate_total){ 
                $cdate_cntotal+=$cdate_monthdata[$x][$y]; 
                $cdate_cnyear = $x; 
                $cdate_cnmonth = $y; 
            } 
        } 
    } 
 
    if (($cdate_cnmonth==$cdate_monthdata[$cdate_cnyear][0]+1)&&($cdate_monthdata[$cdate_cnyear][0]>0)) { 
        $cdate_leap=1; 
    }else{ 
        $cdate_leap=0; 
    } 
 
    $cdate_cnday=$cdate_monthdata[$cdate_cnyear][$cdate_cnmonth]-($cdate_cntotal-$cdate_total); 
 
    if (($cdate_monthdata[$cdate_cnyear][0]>0)&&($cdate_monthdata[$cdate_cnyear][0]<$cdate_cnmonth)) { 
        $cdate_cnmonth = $cdate_cnmonth-1; 
    } 
 
    $cdate_tiangan = $cdate_tianganarray[$cdate_monthdata[$cdate_cnyear][14]]; 
    $cdate_dizhi = $cdate_dizhiarray[$cdate_monthdata[$cdate_cnyear][15]]; 
    $cdate_zodiac = $cdate_zodiacarray[$cdate_monthdata[$cdate_cnyear][15]]; 
    $cdate_cnyear += 1900; 
 
    $cdate_result = array($cdate_cnyear,$cdate_cnmonth,$cdate_cnday,$cdate_leap,$cdate_tiangan,$cdate_dizhi); 
 
    return $cdate_result; 
 
} 
$arr = getchinesedate(&#39;2015&#39;,&#39;10&#39;,&#39;15&#39;); 
echo &#39;农历&#39;.$arr[0].&#39;年&#39;.$arr[1],&#39;月&#39;,$arr[2].&#39;日&#39;; 
?> 

 


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn