1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PHP公历农历转换(阴历阳历转换)阴历和阳历转换

PHP公历农历转换(阴历阳历转换)阴历和阳历转换

时间:2024-08-29 10:37:43

相关推荐

PHP公历农历转换(阴历阳历转换)阴历和阳历转换

Code

1<?php

2/**

3*公农历转换(1912-)

4*

5*Usage:

6*//公历1983-10-5转农历

7*$lunar=newLunar();

8*$date=$lunar->getLar('1983-10-5',0);

9*echodate("Y-m-d",$date);

10*//农历1983-8-29转公历

11*$date=$lunar->getLar('1983-8-29',1);

12*echodate("Y-m-d",$date);

13*

14*@paramstring日期

15*@paramint日期历法

16*-0公历

17*1农历

18*

19*@returntimestamp

20

21

22这是一个国历与农历互相转的Unit.

23

24其中年份皆用民国年份,请自行转换(西元年-1911=民国年).

25***************************************************************************

26*国农历对映表之说明:*

27***************************************************************************

28*前二数字=闰月月份,如果为13则没有闰月*

29*第叁至第六数字=12个月之大小月之2进位码->10进位*

30*例如:*

31*101010101010=2730*

32*1:代表大月(30天)0:代表小月(29天)==>1月大2月小3月大..*

33*第七位数字为闰月天数*

34*0:没有闰月之天数*

35*1:闰月为小月(29天)*

36*2:闰月为大月(30天)*

37*最後2位数字代表阳历之1月1日与阴历之1月1日相差天数*

38***************************************************************************

39这对映表只有民国一年至民国一百年,如不敷您的使用请按照上述之方式自行增加.

40

41这个程式没有判断您所输入之年,月,日是否正确,请自行判断.

42

43如果转换出来之农历的月份是闰月则传给您的值是***负数***

44如果农历要转换国历如果是闰月请输入***负数***

45

46此版本为FreeWareVersion:0.1

47您可以自行修改,但最好可以将修改过之程式Mail一份给我.

48如果您要用於商业用途,请mail给我告知您的用途及原因.

49

50*/

51

52classLunar{

53var$LMDay=array();

54var$InterMonth=0;

55var$InterMonthDays=0;

56var$SLRangeDay=0;

57

58var$SMDay=array(1=>31,28,31,30,31,30,31,31,30,31,30,31);

59var$LongLife=array(1=>

60'132637048','133365036','053365225','132900044','131386034','022778122',//6

61'132395041','071175231','131175050','132635038','052891127','131701046',//12

62'131748035','042741223','130694043','132391032','021327122','131175040',//18

63'061623129','133402047','133402036','051769125','131453044','130694034',//24

64'032158223','132350041','073213230','133221049','133402038','063466226',//30

65'132901045','131130035','042651224','130605043','132349032','023371121',//36

66'132709040','072901128','131738047','132901036','051333226','131210044',//42

67'132651033','031111223','131323042','082714130','133733048','131706038',//48

68'062794127','132741045','131206035','042734124','132647043','131318032',//54

69'033878120','133477039','071461129','131386047','132413036','051245126',//60

70'131197045','132637033','043405122','133365041','083413130','132900048',//66

71'132922037','062394227','132395046','131179035','042711124','132635043',//72

72'102855132','131701050','131748039','062804128','132742047','132359036',//78

73'051199126','131175045','131611034','031866122','133749040','081717130',//84

74'131452049','132742037','052413127','132350046','133222035','043477123',//90

75'133402042','133493031','021877121','131386039','072747128','130605048',//96

76'132349037','053243125','132709044','132890033');

77

78functiongetLar($date,$isLunar=1){

79list($year,$month,$day)=split("-",$date);

80if($isLunar==1)

81return$this->Lunar2Solar($year,$month,$day);

82else

83return$this->Solar2Lunar($year,$month,$day);

84}

85

86functionIsLeapYear($AYear){

87return($AYear%4==0)and(($AYear%100<>0)or($AYear%400==0));

88}

89

90functionCovertLunarMonth($magicno){

91$m=$magicno;

92for($i=12;$i>=1;$i--){

93$size=$m%2;

94if($size==0)

95$this->LMDay[$i]=29;

96else

97$this->LMDay[$i]=30;

98$m=floor($m/2);

99}

100}

101

102functionProcessMagicStr($yy){

103$yy=$yy-1911;

104$magicstr=$this->LongLife[$yy];

105$this->InterMonth=substr($magicstr,0,2);

106$LunarMonth=substr($magicstr,2,4);

107$this->CovertLunarMonth($LunarMonth);

108$dsize=substr($magicstr,6,1);

109switch($dsize){

110case0:

111$this->InterMonthDays=0;

112break;

113case1:

114$this->InterMonthDays=29;

115break;

116case2:

117$this->InterMonthDays=30;

118break;

119}

120$this->SLRangeDay=substr($magicstr,7,2);

121}

122

123functionDaysPerLunarMonth($LYear,$LMonth){

124$this->;ProcessMagicStr($LYear);

125if($LMonth<0)

126return$this->InterMonthDays;

127else

128return$this->LMDay[$LMonth];

129}

130

131functionSolar2Lunar($SYear,$SMonth,$SDay){

132if(!(1912<=$SYear&&$SYear<=)){

133returnfalse;

134}

135$day=0;

136if($this->isLeapYear($SYear))

137$this->SMDay[2]=29;

138$this->;ProcessMagicStr($SYear);

139if($SMonth==1)

140$day=$SDay;

141else{

142for($i=1;$i<=$SMonth-1;$i++)

143$day=$day+$this->SMDay[$i];

144$day=$day+$SDay;

145}

146if($day<=$this->SLRangeDay){

147$day=$day-$this->SLRangeDay;

148$this->processmagicstr($SYear-1);

149for($i=12;$i>=1;$i--){

150$day=$day+$this->LMDay[$i];

151if($day>0)

152break;

153}

154$LYear=$SYear-1;

155$LMonth=$i;

156$LDay=$day;

157}else{

158$day=$day-$this->SLRangeDay;

159for($i=1;$i<=$this->InterMonth-1;$i++){

160$day=$day-$this->LMDay[$i];

161if($day<=0)

162break;

163}

164if($day<=0){

165$LYear=$SYear;

166$LMonth=$i;

167$LDay=$day+$this->LMDay[$i];

168}else{

169$day=$day-$this->LMDay[$this->InterMonth];

170if($day<=0){

171$LYear=$SYear;

172$LMonth=$this->InterMonth;

173$LDay=$day+$this->LMDay[$this->InterMonth];

174}else{

175$this->LMDay[$this->InterMonth]=$this->InterMonthDays;

176for($i=$this->InterMonth;$i<=12;$i++){

177$day=$day-$this->LMDay[$i];

178if($day<=0)

179break;

180}

181if($i==$this->InterMonth)

182$LMonth=0-$this->InterMonth;

183else

184$LMonth=$i;

185$LYear=$SYear;

186$LDay=$day+$this->LMDay[$i];

187}

188}

189}

190returnmktime(0,0,0,$LMonth,$LDay,$LYear);

191}

192

193functionLunar2Solar($LYear,$LMonth,$LDay){

194if(!(1912<=$LYear&&$LYear<=)){

195returnfalse;

196}

197$day=0;

198$SYear=$LYear;

199if($this->isLeapYear($SYear))

200$this->SMDay[2]=29;

201$this->processmagicstr($SYear);

202if($LMonth<0)

203$day=$this->LMDay[$this->InterMonth];

204if($LMonth<>1)

205for($i=1;$i<=$LMonth-1;$i++)

206$day=$day+$this->LMDay[$i];

207$day=$day+$LDay+$this->SLRangeDay;

208if(($this->InterMonth<>13)and($this->InterMonth<$LMonth))

209$day=$day+$this->InterMonthDays;

210for($i=1;$i<=12;$i++){

211$day=$day-$this->SMDay[$i];

212if($day<=0)

213break;

214}

215if($day>0){

216$SYear=$SYear+1;

217if($this->isLeapYear($SYear))

218$this->SMDay[2]=29;

219for($i=1;$i<=12;$i++){

220$day=$day-$this->SMDay[$i];

221if($day<=0)

222break;

223}

224}

225$day=$day+$this->SMDay[$i];

226$SMonth=$i;

227$SDay=$day;

228returnmktime(0,0,0,$SMonth,$SDay,$SYear);

229}

230}

231?>

232

233

234

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。