本文实例为大家分享了php阳历转农历代码,供大家参考,具体内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
<?php
function nongli( $riqi )
{
//优化修改 20160807 FXL
$nian = date ( 'Y' , strtotime ( $riqi ));
$yue = date ( 'm' , strtotime ( $riqi ));
$ri = date ( 'd' , strtotime ( $riqi ));
#源码部分原作者:沈潋(S&S Lab)
#农历每月的天数
$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" , "初一" , "初二" , "初三" , "初四" , "初五" , "初六" , "初七" , "初八" , "初九" , "初十" ,
"十一" , "十二" , "十三" , "十四" , "十五" , "十六" , "十七" , "十八" , "十九" , "二十" ,
"廿一" , "廿二" , "廿三" , "廿四" , "廿五" , "廿六" , "廿七" , "廿八" , "廿九" , "三十" );
##############################
#星期
$weekday = array ( "星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" );
#阳历总天数 至1900年12月21日
$total =11;
#阴历总天数
$mtotal =0;
##############################
#获得当日日期
//$today=getdate(); //获取今天的日期
if ( $nian <1901 || $nian >2020) die ( "年份出错!" );
//$cur_wday=$today["wday"]; //星期中第几天的数字表示
for ( $y =1901; $y < $nian ; $y ++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和
$total +=365;
if ( $y %4==0) $total ++;
}
switch ( $yue ) { //再加当年的几个月
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 ( $nian %4 == 0 && $yue >2) $total ++; //如果当年是闰年还要加一天
$total = $total + $ri -1; //加当月的天数
$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 ++;
}
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) {
$nlmon = $mmonth [0]. $mmonth [ $mm ];#闰月
}
else {
$nlmon = $mmonth [ $mm ]. $mmonth [13];
}
#计算所求月份1号的农历日期
$md = $everymonth [ $j ][ $i ]-( $mtotal - $total );
if ( $md > $everymonth [ $j ][ $i ])
$md -= $everymonth [ $j ][ $i ];
$nlday = $mday [ $md ];
//$nowday=date("Y年n月j日 ")."w".$weekday[$cur_wday]." ".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;
$nowday = $mten [ $everymonth [ $j ][14]]. $mtwelve [ $everymonth [ $j ][15]]. "年 " . $nlmon . $nlday ;
return $nowday ;
}
echo nongli( '20160807' ); //标准8位
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。