农历计算的类(原创)

今天很无聊,随便在网上乱逛,看到很多论坛的程序都提供漂亮的含有农历的日历,查阅了一些资料,改写了以下,编写如下的一个计算农历日期的类,希望有用,有谁知道有现成的月历表代码的话,不妨留个言.
<? php
class  ChineseCalendar{
    
# 农历每月的天数
     private   static   $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 )
    );
    
# #############################
     # 农历天干
     private   static    $mten = array ( " null " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " );
    
# 农历地支
    //private static  $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)","午(马)",
    //"未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");

     private   static    $mtwelve = array ( " null " , " 子,鼠 " , " 丑,牛 " , " 寅,虎 " , " 卯,兔 " , " 辰,龙 " , " 巳,蛇 " , " 午,马 " ,
    
" 未,羊 " , " 申,猴 " , " 酉,鸡 " , " 戌,狗 " , " 亥,猪 " );

    
# 农历月份
     private   static   $mmonth = array ( " " , " " , " " , " " , " " , " " , " " ,
    
" " , " " , " " , " " , " 十一 " , " 十二 " , " " );
    
# 农历日
     private   static    $mday = array ( " null " , " 初一 " , " 初二 " , " 初三 " , " 初四 " , " 初五 " , " 初六 " , " 初七 " , " 初八 " , " 初九 " , " 初十 " ,
    
" 十一 " , " 十二 " , " 十三 " , " 十四 " , " 十五 " , " 十六 " , " 十七 " , " 十八 " , " 十九 " , " 二十 " ,
    
" 廿一 " , " 廿二 " , " 廿三 " , " 廿四 " , " 廿五 " , " 廿六 " , " 廿七 " , " 廿八 " , " 廿九 " , " 三十 " );
    
# #############################
     # 星期
     private   static    $weekday   =   array ( " 星期日 " , " 星期一 " , " 星期二 " , " 星期三 " , " 星期四 " , " 星期五 " , " 星期六 " );
    
# #############################

    
/* *
     * 返回指定日期的农历日期数组对象
     * @example
     * <code>
     * require_once('calendar-fns.php');
     * $date=ChineseCalendar::getChineseCalendar(getdate());
     * </code>
     *
     * @param 日期 $date
     * @return 农历日期数组,格式为:(天干,地支,生肖,月,日,星期),例如:丙,戌,狗,十二月,十八,星期一
     
*/
    
public   static   function  getChineseCalendar( $date ){
        
// $today=getdate();
         # 阳历总天数 至1900年12月21日
         $total = 11 ;
        
# 阴历总天数
         $mtotal = 0 ;

        
$today = $date ;
        
if ( $today [ " year " ] < 1901   ||   $today [ " year " ] > 2020 die ( " 年份出错! " );

        
$cur_wday = $today [ " wday " ];

        
for ( $y = 1901 ; $y < $today [ " year " ]; $y ++ ) {  // 计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和
             $total += 365 ;
            
if  ( $y % 4 == 0 $total ++ ;
        }
        
switch ( $today [ " mon " ]) {  // 再加当年的几个月
             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 ( $today [ " year " ] % 4   ==   0   &&   $today [ " mon " ] > 2 $total ++ // 如果当年是闰年还要加一天

        
$total = $total + $today [ " mday " ] - 1 // 加当月的天数

        
$flag1 = 0 ;   // 判断跳出循环的条件
         $j = 0 ;
        
while  ( $j <= 120 ){   // 用农历的天数累加来判断是否超过阳历的天数
             $i = 1 ;
            
while  ( $i <= 13 ){
                
$mtotal += self :: $everymonth [ $j ][ $i ];
                
if  ( $mtotal >= $total ){
                    
$flag1 = 1 ;
                    
break ;
                }
                
$i ++ ;
            }
            
if  ( $flag1 == 1 break ;
            
$j ++ ;
        }

        
if (self :: $everymonth [ $j ][ 0 ] <> 0  and self :: $everymonth [ $j ][ 0 ] < $i ){  // 原来错在这里,对闰月没有修补
             $mm = $i - 1 ;
        }
        
else {
            
$mm = $i ;
        }

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

        
# 计算所求月份1号的农历日期
         $md = self :: $everymonth [ $j ][ $i ] - ( $mtotal - $total );
        
if ( $md   > self :: $everymonth [ $j ][ $i ])
        
$md -= self :: $everymonth [ $j ][ $i ];
        
$nlday = self :: $mday [ $md ];

        
// 丙,戌,狗,十二月,十八,星期一
        //array(6) { [0]=> string(3) "丙" [1]=> string(3) "戌" [2]=> string(3) "狗" [3]=> string(9) "十二月" [4]=> string(6) "十八" [5]=> string(9) "星期一" }

         $tmp = explode ( ' , ' , self :: $mtwelve [self :: $everymonth [ $j ][ 15 ]]);
        
return   array (
        self
:: $mten [self :: $everymonth [ $j ][ 14 ]] , // 天干
         $tmp [ 0 ] , // 地支
         $tmp [ 1 ] , // 生肖
         $nlmon , // 农历月
         $nlday , // 农历日
        self :: $weekday [ $cur_wday ] // 星期
        );
    }
}
?>

你可能感兴趣的:(计算)