<?php
/*  Copyright by Gao Weibin, Do NOT use this in commerce without my agreement,
  Please tell me before modify this program.

      版权所有,没有我的同意请不要用于商业目的或传播
  没有我的同意请不要更改此程序。


                             高伟斌 2003年1月6日
                          E-Mail: gaowb@gwssi.com.cn

Modified by Sebastien Bruggeman 
E-mail : seba@ulyssis.org
URL : http://seba.ulyssis.org/devel/php.php
*/
?>

<?php
class NL {
   var 
$good TRUE;
   var 
$hind;
   var 
$day;

   function 
NL($Year$Mon$Day$sDay) {
      
$TianGan = array("&#x7532;","&#x4E59;","&#x4E19;","&#x4E01;","&#x620A;","&#x5DF1;","&#x5E9A;","&#x8F9B;","&#x58EC;","&#x7678;");   //10 heavenly stems
      
$DiZhi = array("&#x5B50;","&#x4E11;","&#x5BC5;","&#x536F;","&#x8FB0;","&#x5DF3;","&#x5348;","&#x672A;","&#x7533;","&#x9149;","&#x620C;","&#x4EA5;");  //12 earthly branches
      
$ShuXiang = array("&#x9F20;","&#x725B;","&#x864E;","&#x5154;","&#x9F8D;","&#x86C7;","&#x99AC;","&#x7F8A;","&#x7334;","&#x96DE;","&#x72D7;","&#x8C6C;");  //(animal) sign of the year
      
$DayName = array("&#x521D;&#x4E00;","&#x521D;&#x4E8C;","&#x521D;&#x4E09;","&#x521D;&#x56DB;","&#x521D;&#x4E94;","&#x521D;&#x516D;","&#x521D;&#x4E03;","&#x521D;&#x516B;","&#x521D;&#x4E5D;","&#x521D;&#x5341;","&#x5341;&#x4E00;","&#x5341;&#x4E8C;","&#x5341;&#x4E09;","&#x5341;&#x56DB;","&#x5341;&#x4E94;","&#x5341;&#x516D;","&#x5341;&#x4E03;","&#x5341;&#x516B;","&#x5341;&#x4E5D;","&#x4E8C;&#x5341;","&#x5EFF;&#x4E00;","&#x5EFF;&#x4E8C;","&#x5EFF;&#x4E09;","&#x5EFF;&#x56DB;","&#x5EFF;&#x4E94;","&#x5EFF;&#x516D;","&#x5EFF;&#x4E03;","&#x5EFF;&#x516B;","&#x5EFF;&#x4E5D;","&#x4E09;&#x5341;"); //lunar name of the day
      
$MonName = array("&#x6B63;","&#x4E8C;","&#x4E09;","&#x56DB;","&#x4E94;","&#x516D;","&#x4E03;","&#x516B;","&#x4E5D;","&#x5341;","&#x5341&#x6B63","&#x81D8;"); //lunar name of the month
      
$NongLi = array(0x2000010x17A9DD0x36A8300x2E90260x36A55B0x35242D0x2A5422,
       
0x2A6D170x14B42A0x2AB41E0x2AD8940x36A8260x3B919D0x3A902F0x3528240x155559,
       
0x2A5C2B0x1558200x1574D50x2B54280x2F4A1E0x1D48310x3A94260x2CA95C0x192C2E,
       
0x2A6C220x2A9B180x15A82B0x2D64200x2EA8950x1D48280x36959D0x2C94300x292C24,
       
0x292F590xAB42C,  0x15A8220x16D4960x36A4290x3A4BDF0x3A48320x3494260x34B55B,
       
0x29582E0xAD823,  0x2B57170xDA82B,  0x3AA4200x3D28960x3A48280x3A999D0x14AC2F,
       
0x14AC240x25D9590x2D682C0xDA822,  0x1D86D70x1D24290x2C4FDE0x2A4C310x14AC26,
       
0x146F9A0x2AB42D0x1588230x3697180x17482B0x2D24200x352C950x2A54280x2AB5DC,
       
0x14D82F0x2AB4240x2B2B5A0x17482C0x3694210x3A8AD70x35282A0x16561E0x2A5C30,
       
0x1558260x15D59B0x2B542D0x1B48230x1D55180x3A942B0x1928200x193CD40x2A6C27,
       
0x2B69DD0x15A82F0x2DA4240x2EC95A0x2D482D0x2C94210x2CAD160x292C290x2AAE1E,
       
0xAB430,  0x15B4250x16A79B0x36A42E0x3648230x3A55180x34942B0x3936A00x295832,
       
0xAD827,  0xBD59C,  0x1B542F0x3B24240x3D495A0x3A482D0x3498220x14B8D60x295C28,
       
0x2B5A1E0xD6831,  0x1B54250x2DA55B0x1D242E0x1A4C230x2A6D170x14AC2A0x296C1F,
       
0x2AB8950x15A8270x3755DC0x1748300x2D24250x354D590x2A542C0x14B4210x157516,
       
0x2AB4280x2EAA5E0x1748310x3694260x3A299B0x35282E0x3254230x2A79180x15582A,
       
0x2AD41F0x2B68950x1B48280x1D959C0x1C942F0x192C240x195D590x32AC2B0x156821,
       
0x15B8D60x2DA4290x2F49DE0x2D48310x2C94260x342F9B0x292C2D0x12AC220xAED57,
       
0x16B42A0x2DA81F0x36A8950x3648280x3A95DD0x34942F0x2954240x2937590x12D82C,
       
0x16D4200x1B4AD60x3B24290x3E4A1F0x3A48310x3498260x145B9B0x295C2D0x135822,
       
0xD9717,  0x1D542A0x1D24200x1D2CD40x1A4C270x2AADDC0x14AC2F0x296C230x2AE959,
       
0x15A82C0x2D94210x2EA9160x2D28290x36561E0x2A54310x14B4250x15B59A0x2AD42D,
       
0x16A8230x1755170x36942A0x3528200x3934D50x3258270x3339DC0x15582F0x2AD424,
       
0x2B4B590x1B482C0x3A94210x1CA9170x192C280x1A5E1D0x12AC300x156C250x155B9A,
       
0x2DA82D0x1D48230x2E55180x2C942A0x2A2C1F0x293C940x12AC27,);
      
$ChinaDay = array("0101"=>"&#x6625;&#x7BC0;","0115"=>"&#x5143;&#x5BB5;&#x7BC0;","0505"=>"&#x7AEF;&#x5348;&#x7BC0;","0707"=>"&#x4E03;&#x5915;&#x60C5;&#x4EBA;&#x7BC0;","0715"=>"&#x4E2D;&#x5143;&#x7BC0;","0815"=>"&#x4E2D;&#x79CB;&#x7BC0;","0909"=>"&#x91CD;&#x967D;&#x7BC0;","1208"=>"&#x81D8;&#x516B;&#x7BC0;","1224"=>"&#x5C0F;&#x5E74;","0100"=>"&#x9664;&#x5915;");
      
$goodDay = array("&#x7533;&#x9149;&#x5B50;&#x4E11;&#x536F;&#x5348;","&#x620C;&#x4EA5;&#x5BC5;&#x536F;&#x5DF3;&#x7533;","&#x5B50;&#x4E11;&#x8FB0;&#x5DF3;&#x672A;&#x620C;","&#x5BC5;&#x536F;&#x5348;&#x672A;&#x9149;&#x5B50;","&#x8FB0;&#x5DF3;&#x7533;&#x9149;&#x4EA5;&#x5BC5;","&#x5348;&#x672A;&#x620C;&#x4EA5;&#x4E11;&#x8FB0;");
      
$advice = array("&#x7532;&#x5B50;&#x4E59;&#x4E11;&#x4E19;&#x5BC5;&#x5DF1;&#x5DF3;&#x5E9A;&#x5348;&#x8F9B;&#x672A;&#x7532;&#x620C;&#x4E59;&#x4EA5;&#x4E19;&#x5B50;&#x4E59;&#x536F;&#x58EC;&#x5B50;&#x7678;&#x672A;&#x7532;&#x7533;&#x5E9A;&#x5BC5;&#x8F9B;&#x536F;&#x4E59;&#x672A;&#x620A;&#x5BC5;&#x5E9A;&#x5B50;&#x7678;&#x536F;&#x4E19;&#x5348;&#x58EC;&#x5B50;&#x7532;&#x5BC5;&#x4E59;&#x536F;&#x5DF1;&#x672A;&#x5E9A;&#x7533;&#x8F9B;&#x9149;",
         
"&#x8F9B;&#x672A;&#x4E19;&#x5B50;&#x4E01;&#x4E11;&#x58EC;&#x5348;&#x7678;&#x672A;&#x7532;&#x7533;&#x8F9B;&#x536F;&#x4E59;&#x672A;&#x58EC;&#x8FB0;&#x5E9A;&#x5B50;&#x620A;&#x7533;&#x58EC;&#x5B50;&#x7678;&#x536F;&#x4E01;&#x672A;&#x4E59;&#x672A;&#x7532;&#x5BC5;&#x4E59;&#x536F;&#x8F9B;&#x9149;",
         
"&#x8F9B;&#x672A;&#x58EC;&#x7533;&#x7678;&#x9149;&#x4E01;&#x4E11;&#x4E59;&#x536F;&#x58EC;&#x5348;&#x7532;&#x7533;&#x4E01;&#x4EA5;&#x58EC;&#x8FB0;&#x4E59;&#x672A;&#x58EC;&#x5BC5;&#x7532;&#x8FB0;&#x4E59;&#x5DF3;&#x4E19;&#x5348;&#x5DF1;&#x9149;&#x5E9A;&#x620C;&#x8F9B;&#x4EA5;&#x4E19;&#x8FB0;&#x5DF1;&#x672A;&#x5E9A;&#x7533;&#x8F9B;&#x9149;");
      
$md = array(312831303130313130313031);
      
$days $Day;
      for(
$i 1$i $Mon$i++)
         
$days += $md[$i-1];
      if ((
$Mon 2) && ((($Year%4==0) && ($Year%100!=0)) || ($Year%400==0)))
         
$days++;
      
$data $NongLi[$Year-1880] % 64;
      
$diff $days $data 1;
      
$data floor($NongLi[$Year-1880]/64);

      
$vday 0;
      
$i 0;

      if (
$diff 0) {
         
$data %= 16;
         if (
$data 0)
            if (
$data 10) {
               
$largeLeap TRUE;
               
$leapMon $data 8;
            } else
               
$leapMon $data;
         else
            
$leapMon 0;
         
$data floor($NongLi[$Year-1880]/1024);
         while(
$i 12) {
            if ((
$leapMon 0) && ($leapMon == $i)) {
               
$vday += 29;
               if (isset(
$largeLeap))
                  
$vday++;
               if (
$vday $diff) {
                  
$i--;
                  
$leapFlag TRUE;
                  
$vday -= 29;
                  if (isset(
$largeLeap))
                     
$vday--;
                  break;
               }
            }
            
$vday += 29;
            if ((
$data%2) == 1)
               
$vday++;
            if (
$vday $diff) {
               
$vday -= 29;
               if ((
$data%2) == 1)
                  
$vday--;
               break;
            }
            
$i++;
            
$data floor($data/2);
         }
         
$diff -= $vday;
      } else if (
$diff 0) {
         
$Year--;
         
$i 11;
         
$data floor($NongLi[$Year-1880]/0x100000);
         
$diff += 29;
         if (
$data 1)
            
$diff++;
         if (
$diff 0) {
            
$diff += 29;
            if ((
$data%2) == 1)
               
$diff++;
            
$i--;
         }
         
$lastFlag TRUE;
      }

      
$this->hint "&#x3010;".$ShuXiang[($Year-4)%12]."&#x3011;".$TianGan[($Year-4)%10].$DiZhi[($Year-4)%12]."&#x5E74;";
      
$mons = ($Year-1881)*12 $Mon;
      if (isset(
$lastFlag))
         
$mons += 12;
      if (
$Day $sDay)
         
$mons--;
      
$this->hint .= $TianGan[($mons+4)%10].$DiZhi[$mons%12]."&#x6708;";

      
$key $Year;
      if (isset(
$lastFlag))
         
$key++;
      for(
$j 1881$j $key$j++) {
         
$days += 365;
         if (((
$j%4==0) && ($j%100!=0)) || ($j%400==0))
            
$days++;
      }
      
$key $TianGan[$days%10].$DiZhi[($days+6)%12];
      
$this->hint .= $key."&#x65E5;";

      if (isset(
$leapFlag))
            
$this->day .= "&#x958F";
         
$this->day .=
$MonName[$i]."(".($i+1).")"."&#x6708;".$DayName[$diff]."&#x65E5;";

      if (
$i++ > 9)
         
$key strval($i);
      else
         
$key "0".strval($i);

      if (
$diff++ > 9)
         
$key .= $diff;
      else
         
$key .= "0".$diff;

      if ((
$i == 12) && ($diff 28))
         if (((
$diff==29) && ($NongLi[$Year-1880]<0x200000)) || ($diff==30))
            
$key "0100";

      if (
array_key_exists($key$ChinaDay))
         
$this->day .= " :: ".$ChinaDay[$key];
   }
}

$Year intval($_GET['Year']);
$Mon intval($_GET['Mon']);

if ((
$Year<1881) || ($Year>2100) || ($Mon<1) || ($Mon>12)) {
   
$Year intval(strftime("%Y"));
   
$Mon intval(date("n"));
}

$day 1;
$md = array(312831303130313130313031);
for(
$i 1$i $Mon$i++)
   
$day += $md[$i-1];
if ((
$Mon 2) && ((($Year%4==0) && ($Year%100!=0)) || ($Year%400==0)))
   
$day++;
for(
$i 1881$i $Year$i++) {
   
$day += 365;
   if (((
$i%4==0) && ($i%100!=0)) || ($i%400==0))
      
$day++;
}
$wn = ($day+5) % 7;

$lastday $md[$Mon-1];
if ((
$Mon == 2) && ((($Year%4==0) && ($Year%100!=0)) || ($Year%400==0)))
   
$lastday++;
   
/* Give the month and day as 4 digits and then the name of the (lunar) holiday you want to add. */
$Holiday =
array(
"0101"=>"&#x5143;&#x65E6;","0202"=>"&#x6FD5;&#x5730;&#x65E5;","0214"=>"&#x60C5;&#x4EBA;&#x7BC0;","0308"=>"&#x5A66;&#x5973;&#x7BC0;",
   
"1225"=>"&#x8056;&#x895;&#x7BC0;");
$sData = array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,
   
263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);

$sDay[0] = floor((($Year-1881)*31556925974.7+$sData[2*($Mon-1)]*60000+386804876)/86400000)-$day+2;
$sDay[1] = floor((($Year-1881)*31556925974.7+$sData[2*($Mon-1)+1]*60000+386804876)/86400000)-$day+2;

if (
function_exists("easter_days")) {
   
$eDay easter_days($Year);
   if (
$eDay 10) {
      
$eDay -= 10;
      
$eMon 4;
   } else {
      
$eDay += 21;
      
$eMon 3;
   }
}

for(
$i 1$i <= $lastday$i++) {
   
$nongli = new NL($Year$Mon$i$sDay[0]);
   if (
date(d) == $i) {
    echo 
$nongli->hint;    
    echo 
" / ".$nongli->day;
       if (
$Mon 10)
          
$key "0".$Mon;
       else
          
$key $Mon;
       if (
$i 10)
          
$key .= "0".$i;
       else
          
$key .= $i;
       if (
array_key_exists($key$Holiday))
          echo 
" :: ".$Holiday[$key];
    } 
// end if 
//end for

?>