清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
在网上一个原有的源码基础上小小的改动了下,包成函数,便于灵活转换。
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位 |