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
|
<?php class lunar{
#農曆每月的天數
var $everyCMonth = 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)
);
##############################
#農曆天干
var $mten = array ( "null" , "甲" , "乙" , "丙" , "丁" , "戊" , "己" , "庚" , "辛" , "壬" , "癸" ); #農曆地支
var $mtwelve = array ( "null" , "子(鼠)" , "醜(牛)" , "寅(虎)" , "卯(兔)" , "辰(龍)" ,
"巳(蛇)" , "午(馬)" , "未(羊)" , "申(猴)" , "酉(雞)" , "戌(狗)" , "亥(豬)" ); #農曆月份
var $mmonth = array ( "閏" , "正" , "二" , "三" , "四" , "五" , "六" ,
"七" , "八" , "九" , "十" , "十一" , "十二" , "月" );
var $mday = array ( "null" , "初一" , "初二" , "初三" , "初四" , "初五" , "初六" , "初七" , "初八" , "初九" , "初十" ,
"十一" , "十二" , "十三" , "十四" , "十五" , "十六" , "十七" , "十八" , "十九" , "二十" ,
"廿一" , "廿二" , "廿三" , "廿四" , "廿五" , "廿六" , "廿七" , "廿八" , "廿九" , "三十" );#農曆日
var $mweek = array (0=> "星期日" ,1=> "星期一" ,2=> "星期二" ,3=> "星期三" ,4=> "星期四" ,5=> "星期五" ,6=> "星期六" );
##############################
#賦給初值
#天干地支
var $ten =0;
var $twelve =0;
function MyPub( $cYear , $cMonth , $cDay ){
$total =11;#陽曆總天數 至1900年12月21日
$mtotal =0;#陰曆總天數
for ( $y =1901; $y < $cYear ; $y ++)
{
$total +=365;
if ( $y %4==0) $total ++;
}
#再加當年的幾個月
switch ( $cMonth ){
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 ( $cYear %4==0 and $cMonth >2){
$total ++;
}
$total += $cDay -1;
##############################
#用農曆的天數累加來判斷是否超過陽曆的天數
for ( $j =0; $j <=120; $j ++){
$i =1;
for ( $i =1; $i <=13; $i ++)
{
$mtotal += $this ->everyCMonth[ $j ][ $i ];
if ( $mtotal >= $total )
{
$flag =1;
break ;
}
}
if ( $flag ==1) break ;
}
return array ( "m" => $j , "d" => $i , "t" => $total , "n" => $mtotal );
}
function Cal( $Year , $Month , $Day ){
$Par = $this ->MyPub( $Year , $Month , $Day );
$md = $this ->everyCMonth[ $Par [ "m" ]][ $Par [ "d" ]]-( $Par [ "n" ]- $Par [ "t" ]);
$week =( $Par [ "t" ]+5)%7;
$week = $this ->mweek[ $week ]; //轉中文星期
if ( $this ->everyCMonth[ $Par [ "m" ]][0]<>0 and $this ->everyCMonth[ $Par [ "m" ]][0]< $Par [ "d" ]){
$mm = $Par [ "d" ]-1;
} else {
$mm = $Par [ "d" ];
}
if ( $Par [ "d" ]== $this ->everyCMonth[ $Par [ "d" ]][0]+1 and $this ->everyCMonth[ $Par [ "d" ]][0]<>0){
$cMonth = $this ->mmonth[0]. $this ->mmonth[ $mm ];#閏月
} else {
$cMonth = $this ->mmonth[ $mm ]. $this ->mmonth[13];
}
return array ( "year" => $this ->mten[ $this ->everyCMonth[ $Par [ "m" ]][14]]. $this ->mtwelve[ $this ->everyCMonth[ $Par [ "m" ]][15]],
"month" => $cMonth ,
"day" => $this ->mday[ $md ],
"week" => $week );
}
} /***************************************呼叫***************************************/ $lunar = new lunar();
$nowday = $lunar ->Cal( date ( "Y" ), date ( "m" ), date ( "d" ));
echo date ( "Y年m月d日" ). " " . $nowday [ "week" ]. `<br />農曆` . $nowday [ "year" ]. "年" . $nowday [ "month" ]. $nowday [ "day" ]. "日 " ;
?> |