|
這是一位在歐洲留學的大陸留學生的作品
http://seba.studentenweb.org/devel/calendar.phps
<?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("甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); //10 heavenly stems
$DiZhi = array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"); //12 earthly branches
$ShuXiang = array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬"); //(animal) sign of the year
$DayName = array("初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"); //lunar name of the day
$MonName = array("正","二","三","四","五","六","七","八","九","十","十正","臘"); //lunar name of the month
$NongLi = array(0x200001, 0x17A9DD, 0x36A830, 0x2E9026, 0x36A55B, 0x35242D, 0x2A5422,
0x2A6D17, 0x14B42A, 0x2AB41E, 0x2AD894, 0x36A826, 0x3B919D, 0x3A902F, 0x352824, 0x155559,
0x2A5C2B, 0x155820, 0x1574D5, 0x2B5428, 0x2F4A1E, 0x1D4831, 0x3A9426, 0x2CA95C, 0x192C2E,
0x2A6C22, 0x2A9B18, 0x15A82B, 0x2D6420, 0x2EA895, 0x1D4828, 0x36959D, 0x2C9430, 0x292C24,
0x292F59, 0xAB42C, 0x15A822, 0x16D496, 0x36A429, 0x3A4BDF, 0x3A4832, 0x349426, 0x34B55B,
0x29582E, 0xAD823, 0x2B5717, 0xDA82B, 0x3AA420, 0x3D2896, 0x3A4828, 0x3A999D, 0x14AC2F,
0x14AC24, 0x25D959, 0x2D682C, 0xDA822, 0x1D86D7, 0x1D2429, 0x2C4FDE, 0x2A4C31, 0x14AC26,
0x146F9A, 0x2AB42D, 0x158823, 0x369718, 0x17482B, 0x2D2420, 0x352C95, 0x2A5428, 0x2AB5DC,
0x14D82F, 0x2AB424, 0x2B2B5A, 0x17482C, 0x369421, 0x3A8AD7, 0x35282A, 0x16561E, 0x2A5C30,
0x155826, 0x15D59B, 0x2B542D, 0x1B4823, 0x1D5518, 0x3A942B, 0x192820, 0x193CD4, 0x2A6C27,
0x2B69DD, 0x15A82F, 0x2DA424, 0x2EC95A, 0x2D482D, 0x2C9421, 0x2CAD16, 0x292C29, 0x2AAE1E,
0xAB430, 0x15B425, 0x16A79B, 0x36A42E, 0x364823, 0x3A5518, 0x34942B, 0x3936A0, 0x295832,
0xAD827, 0xBD59C, 0x1B542F, 0x3B2424, 0x3D495A, 0x3A482D, 0x349822, 0x14B8D6, 0x295C28,
0x2B5A1E, 0xD6831, 0x1B5425, 0x2DA55B, 0x1D242E, 0x1A4C23, 0x2A6D17, 0x14AC2A, 0x296C1F,
0x2AB895, 0x15A827, 0x3755DC, 0x174830, 0x2D2425, 0x354D59, 0x2A542C, 0x14B421, 0x157516,
0x2AB428, 0x2EAA5E, 0x174831, 0x369426, 0x3A299B, 0x35282E, 0x325423, 0x2A7918, 0x15582A,
0x2AD41F, 0x2B6895, 0x1B4828, 0x1D959C, 0x1C942F, 0x192C24, 0x195D59, 0x32AC2B, 0x156821,
0x15B8D6, 0x2DA429, 0x2F49DE, 0x2D4831, 0x2C9426, 0x342F9B, 0x292C2D, 0x12AC22, 0xAED57,
0x16B42A, 0x2DA81F, 0x36A895, 0x364828, 0x3A95DD, 0x34942F, 0x295424, 0x293759, 0x12D82C,
0x16D420, 0x1B4AD6, 0x3B2429, 0x3E4A1F, 0x3A4831, 0x349826, 0x145B9B, 0x295C2D, 0x135822,
0xD9717, 0x1D542A, 0x1D2420, 0x1D2CD4, 0x1A4C27, 0x2AADDC, 0x14AC2F, 0x296C23, 0x2AE959,
0x15A82C, 0x2D9421, 0x2EA916, 0x2D2829, 0x36561E, 0x2A5431, 0x14B425, 0x15B59A, 0x2AD42D,
0x16A823, 0x175517, 0x36942A, 0x352820, 0x3934D5, 0x325827, 0x3339DC, 0x15582F, 0x2AD424,
0x2B4B59, 0x1B482C, 0x3A9421, 0x1CA917, 0x192C28, 0x1A5E1D, 0x12AC30, 0x156C25, 0x155B9A,
0x2DA82D, 0x1D4823, 0x2E5518, 0x2C942A, 0x2A2C1F, 0x293C94, 0x12AC27,);
$ChinaDay = array("0101"=>"春節","0115"=>"元宵節","0505"=>"端午節","0707"=>"七夕情人節","0715"=>"中元節","0815"=>"中秋節","0909"=>"重陽節","1208"=>"臘八節","1224"=>"小年","0100"=>"除夕");
$goodDay = array("申酉子丑卯午","戌亥寅卯巳申","子丑辰巳未戌","寅卯午未酉子","辰巳申酉亥寅","午未戌亥丑辰");
$advice = array("甲子乙丑丙寅己巳庚午辛未甲戌乙亥丙子乙卯壬子癸未甲申庚寅辛卯乙未戊寅庚子癸卯丙午壬子甲寅乙卯己未庚申辛酉",
"辛未丙子丁丑壬午癸未甲申辛卯乙未壬辰庚子戊申壬子癸卯丁未乙未甲寅乙卯辛酉",
"辛未壬申癸酉丁丑乙卯壬午甲申丁亥壬辰乙未壬寅甲辰乙巳丙午己酉庚戌辛亥丙辰己未庚申辛酉");
$md = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$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 = "【".$ShuXiang[($Year-4)%12]."】".$TianGan[($Year-4)%10].$DiZhi[($Year-4)%12]."年";
$mons = ($Year-1881)*12 + $Mon;
if (isset($lastFlag))
$mons += 12;
if ($Day < $sDay)
$mons--;
$this->hint .= $TianGan[($mons+4)%10].$DiZhi[$mons%12]."月";
$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."日";
if (isset($leapFlag))
$this->day .= "閏";
$this->day .=
$MonName[$i]."(".($i+1).")"."月".$DayName[$diff]."日";
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(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
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"=>"元旦","0202"=>"濕地日","0214"=>"情人節","0308"=>"婦女節",
"1225"=>"聖࢕節");
$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
?> |
|