当前位置:首页> PHP教程> PHP代码
关键字
文章内容
用PHP写的阴阳万年历
 
 
修改时间:[2010/08/28 02:52]    阅读次数:[1445]    发表者:[起缘]
 
<?php 
############################## 
#  # 
#  # 
#  世纪万年历  # 
#  # 
#  # 
############################## 

#这是唯一的设置-请输入php文件的位置 

$file="http://127.0.0.1/s2m.php"; 

########################################### 
#作者:  沈潋(S&S  Lab)  # 
#版权声明:  # 
#作者开放版权  # 
#允许无条件地使用本文件的全部或部分  # 
#可作任何修改或增补  # 
#如果您使用了本文件,请给作者写一封E-mail  # 
#如有问题欢迎同作者联系  # 
#谢谢您的关注!  # 
########################################### 

#农历每月的天数 
$everymonth=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) 
); 
############################## 
#农历天干 
$mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); 
#农历地支 
$mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)", 
"巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)"); 
#农历月份 
$mmonth=array("闰","正","二","三","四","五","六", 
"七","八","九","十","十一","十二","月"); 
#农历日 
$mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十", 
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十", 
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"); 
############################## 
#赋给初值 
#天干地支 
$ten=0; 
$twelve=0; 
#星期 
$week=5; 
#农历日 
$md=0; 
#农历月 
$mm=0; 
#阳历总天数  至1900年12月21日 
$total=11; 
#阴历总天数 
$mtotal=0; 
############################## 

#获得当日日期 
$today=getdate(); 
#如果没有输入,设为当日日期 
if  ($year==""  or  $month==""  or  ($year<1901  or  $year>2020) 
or  ($month<1  or  $month>12)){ 
$year=$today[year]; 
$month=$today[mon]; 


############################## 
#计算到所求日期阳历的总天数-自1900年12月21日始 
#先算年的和 
for  ($y=1901;$y<$year;$y++){ 
$total+=365; 
if  ($y%4==0)  $total  ++; 

#再加当年的几个月 
switch  ($month){ 
case  12: 
$total+=30; 
case  11: 
$total+=31; 
case  10: 
$total+=30; 
case  9: 
$total+=31; 
case  8: 
$total+=31; 
case  7: 
$total+=30; 
case  6: 
$total+=31; 
case  5: 
$total+=30; 
case  4: 
$total+=31; 
case  3: 
$total+=28; 
case  2: 
$total+=31; 

#如果当年是闰年还要加一天 
if  ($year%4==0  and  $month>2){ 
$total++; 


#顺便算出当月1日星期几 
$week=($total+$week)%7; 
############################## 
#用农历的天数累加来判断是否超过阳历的天数 
$flag1=0;#判断跳出循环的条件 
$j=0; 
while  ($j<=120){ 
$i=1; 
while  ($i<=13){ 
$mtotal+=$everymonth[$j][$i]; 
if  ($mtotal>=$total){ 
$flag1=1; 
break; 

$i++; 

if  ($flag1==1)  break; 
$j++; 

############################## 
#计算所求月份1号的农历日期 
$md=$everymonth[$j][$i]-($mtotal-$total); 
#月头空开的天数 
$k=$week; 
#是否跨越一年 
switch  ($month){ 
case  1: 
case  3: 
case  5: 
case  7: 
case  8: 
case  10: 
case  12: 
$dd=31; 
break; 
case  4: 
case  6: 
case  9: 
case  11: 
$dd=30; 
break; 
case  2: 
if  ($year%4==0){ 
$dd=29; 
}else{ 
$dd=28; 

break; 

#是否跨越一年 
$ty=0; 
if  ((($everymonth[$j][0]<>0  and  $i==13)  or  ($everymonth[$j][0]==0  and  $i==12)) 
and  $mtotal-$total<$dd)  $ty=1; 


?> 

<html> 

<head> 
<title>S2M</title> 
</head> 

<body  bgcolor="#CCFFFF"  text="#008000"> 

<?php 
#打印年月抬头 
echo  "<p  align="center"><font  size="6"><b>".$year."年".$month."月</b></font></p>n"; 
if  ($ty==0){ 
echo  "<p  align="center"><b><font  size="4">".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年</font></b></p>"; 
}else{ 
echo  "<p  align="center"><b><font  size="4">".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."/".$mten[$everymonth[$j+1][14]].$mtwelve[$everymonth[$j+1][15]]."年</font></b></p>"; 

?> 

<div  align="center"> 
<center> 
<table  border="1"  width="85%"> 
<tr> 
<td  align="center"  bgcolor="#CCCCCC"><font  size="4"  color="#FF0000"><b>星期日</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  color="#000000"  size="4"><b>星期一</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  color="#000000"  size="4"><b>星期二</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  color="#000000"  size="4"><b>星期三</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  color="#000000"  size="4"><b>星期四</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  color="#000000"  size="4"><b>星期五</b></font></td> 
<td  width="14%"  align="center"  bgcolor="#CCCCCC"><font  size="4"  color="#008000"><b>星期六</b></font></td> 
</tr> 
<?php 
$day=1; 
$line=0; 
while  ($day<=$dd){ 
echo  "<tr>n"; 
for  ($s=0;$s<=6;$s++){ 
if  ($k<>0  or  $day>$dd){ 
#空格 
echo  "<td  width="14%"  align="center"> </td>n"; 
$k--; 
}else{ 
#设置字符颜色 
switch  ($s){ 
case  1: 
case  2: 
case  3: 
case  4: 
case  5: 
$color="#000000"; 
break; 
case  0: 
$color="#FF0000"; 
break; 
case  6: 
$color="#008000"; 
break; 

#生成中文农历 
if  ($md==1){#1日打印月份 
if  ($everymonth[$j][0]<>0  and  $everymonth[$j][0]<$i){ 
$mm=$i-1; 
}else{ 
$mm=$i; 

if  ($i==$everymonth[$j][0]+1  and  $everymonth[$j][0]<>0)  $chi=$mmonth[0].$mmonth[$mm];#闰月 
else  $chi=$mmonth[$mm].$mmonth[13]; 
}else{ 
$chi=$mday[$md]; 

echo  "<td  width="14%"  align="center"><font  color="$color"><font  size="4"><b>$day  </b>  </font><b><font  size="2">$chi</font></b></font></td>n"; 
#下一天 
$day++; 
$md++; 
if  ($md>$everymonth[$j][$i]){ 
$md=1; 
$i++; 

if  (($i>12  and  $everymonth[$j][0]==0)  or  ($i>13  and  $everymonth[$j][0]<>0)){ 
$i=1; 
$j++; 



echo  "</tr>n"; 
$line++; 
}
?>
</table> 
</center> 
</div> 

<?php 
#补足空行 
for  ($l=1;$l<=(6-$line);$l++){ 
echo  "<table  border="0"  width="100%">n"; 
echo  "<tr>n"; 
echo  "<td  width="100%"><font  color="#CCFFFF">a</font></td>n"; 
echo  "</tr>n"; 
echo  "</table>n"; 

#打印上一月,下一月 
$ly=$ny=$year; 
$last=$month-1; 
if  ($last==0){ 
$last=12; 
$ly--; 

$next=$month+1; 
if  ($next==13){ 
$next=1; 
$ny++; 

if  ($ly>=1901) 
echo  "<p  align="center"><a  href="".$file."?year=".$ly."&month=".$last.""><<上一个月</a>  n"; 
else 
echo  "<p  align="center">"; 
if  ($ny<=2020) 
echo  "<a  href="".$file."?year=".$ny."&month=".$next."">下一个月>></a></p>n"; 
?> 

<?php 
echo  "<form  method="POST"  action="".$file."">n"; 
?> 
<p  align="center"><font  color="#000000">年份:</font><select  size="1"  name="year"> 
<option>2020</option> 
<option>2019</option> 
<option>2018</option> 
<option>2017</option> 
<option>2016</option> 
<option>2015</option> 
<option>2014</option> 
<option>2013</option> 
<option>2012</option> 
<option>2011</option> 
<option>2010</option> 
<option>2009</option> 
<option>2008</option> 
<option>2007</option> 
<option>2006</option> 
<option>2005</option> 
<option>2004</option> 
<option>2003</option> 
<option>2002</option> 
<option>2001</option> 
<option  selected>2000</option> 
<option>1999</option> 
<option>1998</option> 
<option>1997</option> 
<option>1996</option> 
<option>1995</option> 
<option>1994</option> 
<option>1993</option> 
<option>1992</option> 
<option>1991</option> 
<option>1990</option> 
<option>1989</option> 
<option>1988</option> 
<option>1987</option> 
<option>1986</option> 
<option>1985</option> 
<option>1984</option> 
<option>1983</option> 
<option>1982</option> 
<option>1981</option> 
<option>1980</option> 
<option>1979</option> 
<option>1978</option> 
<option>1977</option> 
<option>1976</option> 
<option>1975</option> 
<option>1974</option> 
<option>1973</option> 
<option>1972</option> 
<option>1971</option> 
<option>1970</option> 
<option>1969</option> 
<option>1968</option> 
<option>1967</option> 
<option>1966</option> 
<option>1965</option> 
<option>1964</option> 
<option>1963</option> 
<option>1962</option> 
<option>1961</option> 
<option>1960</option> 
<option>1959</option> 
<option>1958</option> 
<option>1957</option> 
<option>1956</option> 
<option>1955</option> 
<option>1954</option> 
<option>1953</option> 
<option>1952</option> 
<option>1951</option> 
<option>1950</option> 
<option>1949</option> 
<option>1948</option> 
<option>1947</option> 
<option>1946</option> 
<option>1945</option> 
<option>1944</option> 
<option>1943</option> 
<option>1942</option> 
<option>1941</option> 
<option>1940</option> 
<option>1939</option> 
<option>1938</option> 
<option>1937</option> 
<option>1936</option> 
<option>1935</option> 
<option>1934</option> 
<option>1933</option> 
<option>1932</option> 
<option>1931</option> 
<option>1930</option> 
<option>1929</option> 
<option>1928</option> 
<option>1927</option> 
<option>1926</option> 
<option>1925</option> 
<option>1924</option> 
<option>1923</option> 
<option>1922</option> 
<option>1921</option> 
<option>1920</option> 
<option>1919</option> 
<option>1918</option> 
<option>1917</option> 
<option>1916</option> 
<option>1915</option> 
<option>1914</option> 
<option>1913</option> 
<option>1912</option> 
<option>1911</option> 
<option>1910</option> 
<option>1909</option> 
<option>1908</option> 
<option>1907</option> 
<option>1906</option> 
<option>1905</option> 
<option>1904</option> 
<option>1903</option> 
<option>1902</option> 
<option>1901</option> 


</select><font  color="#000000">年</font><font  color="#000000"> 
月份:<select  size="1"  name="month"> 
<option  selected>1</option> 
<option>2</option> 
<option>3</option> 
<option>4</option> 
<option>5</option> 
<option>6</option> 
<option>7</option> 
<option>8</option> 
<option>9</option> 
<option>10</option> 
<option>11</option> 
<option>12</option>
</select>月  </font><input  type="submit"  value="查询"  name="B1"></p>
</form>
</body>
</html>