PHP实现24节气的计算方法
二十四節氣的日期規定:
太陽從黃經零度起,沿黃經每運行15度所經歷的時日稱為“一個節氣”。每年運行360度,共經歷24個節氣,每月2個。其中,每月第一個節氣為“節氣”,即:立春、驚蟄、清明、立夏、芒種、小暑、立秋、白露、寒露、立冬、大雪和小寒等12個節氣;每月的第二個節氣為“中氣”,即:雨水、春分、谷雨、小滿、夏至、大暑、處暑、秋分、霜降、小雪、冬至和大寒等12個節氣。“節氣” 和“中氣”交替出現,各歷時15天,現在人們已經把“節氣”和“中氣”統稱為“節氣”。
二十四節氣計算公式:
立春日期的計算
計算公式:[Y*D+C]-L
公式解讀:年數的后2位乘0.2422加3.87取整數減閏年數。21世紀C值=3.87,22世紀C值=4.15。
舉例說明:2058年立春日期的計算步驟[58×.0.2422+3.87]-[(58-1)/4]=17-14=3,則2月3日立春。
雨水日期的計算 [Y*D+C]-L
公式解讀:年數的后2位乘0.2422加18.74取整數減閏年數。21世紀雨水的C值18.73。
舉例說明:2008年雨水日期=[8×.0.2422+18.73]-[(8-1)/4]=20-1=19,2月19日雨水。
例外:2026年計算得出的雨水日期應調減一天為18日。
驚蟄日期的計算 [Y*D+C]-L
公式解讀:年數的后2位乘0.2422加5.63取整數減閏年數。21世紀驚蟄的C值=5.63。
舉例說明:2088年驚蟄日期=[88×.0.2422+5.63]-[88/4]=26-22=4,3月4日是驚蟄。
例外:無。
春分日期的計算 [Y*D+C]-L
公式解讀:年數的后2位乘0.2422加20.646取整數減閏年數。21世紀春分的C值=20.646。
舉例說明:2092年春分日期=[92×.0.2422+20.646]-[92/4]=42-23=19,3月19日是春分。
例外:2084年的計算結果加1日。
清明節日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=4.81,20世紀=5.59。
舉例說明:2088年清明日期=[88×.0.2422+4.81]-[88/4]=26-22=4,4月4日是清明。
例外:無。
谷雨節日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=20.1,20世紀=20.888。
舉例說明:2088年谷雨日期=[88×.0.2422+20.1]-[88/4]=41-22=19,4月19日是谷雨。
例外:無。
立夏日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=5.52,20世紀=6.318。
舉例說明:2088年立夏日期=[88×.0.2422+5.52]-[88/4]=26-22=4,5月4日是立夏。
例外:1911年的計算結果加1日。
小滿日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=21.04,20世紀=21.86。
舉例說明:2088年小滿日期=[88×.0.2422+21.04]-[88/4]=42-22=20,5月20日小滿。
例外:2008年的計算結果加1日。
芒種日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=5.678,20世紀=6.5。
舉例說明:2088年芒種日期=[88×.0.2422+5.678]-[88/4]=26-22=4,6月4日芒種。
例外:1902年的計算結果加1日。
夏至日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=21.37,20世紀=22.20。
舉例說明:2088年夏至日期=[88×.0.2422+21.37]-[88/4]=42-22=20,6月20日夏至。
例外:1928年的計算結果加1日。
小暑日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=7.108,20世紀=7.928。
舉例說明:2088年小暑日期= [88×0.2422+7.108]-[88/4]=28-22=6,7月6日是小暑。
例外:1925年和2016年的計算結果加1日。
大暑日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=22.83,20世紀=23.65。
舉例說明:2088年大暑日期= [88×0.2422+22.83]-[88/4]=44-22=22,7月22日大暑。
例外:1922年的計算結果加1日。
立秋日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=7.5,20世紀=8.35。
舉例說明:2088年立秋日期=[88×0.2422+7.5]-[88/4]=28-22=6,8月6日是立秋。
例外:2002年的計算結果加1日。
處暑日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=23.13,20世紀=23.95。
舉例說明:2088年處暑日期=[88×0.2422+23.13]-[88/4]=44-22=22,8月22日處暑。
例外:無。
白露日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=7.646,20世紀=8.44。
舉例說明:2088年白露日期=[88×0.2422+7.646]-[88/4]=28-22=6,9月6日是白露。
例外:1927年的計算結果加1日。
秋分日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=23.042,20世紀=23.822。
舉例說明:2088年秋分日期=[8×.0.2422+23.042]-[88/4]=44-22=22,9月22日是秋分。
例外:1942年的計算結果加1日。
寒露日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=8.318,20世紀=9.098。
舉例說明:2088年寒露日期=[88×0.2422+8.318]-[88/4]=29-22=7,10月7日是寒露。
例外:無。
霜降日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=23.438,20世紀=24.218。
舉例說明:2088年霜降日期=[88×0.2422+23.438]-[88/4]=44-22=22,10月22日霜降。
例外:2089年的計算結果加1日。
立冬日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=7.438,20世紀=8.218。
舉例說明:2088年立冬日期=[88×0.2422+7.438]-[88/4]=28-22=6,11月6日是立冬。
例外:2089年的計算結果加1日。
小雪日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=22.36,20世紀=23.08。
舉例說明:2088年小雪日期=[88×0.2422+22.36]-[88/4]=43-22=21,11月21日小雪。
例外:1978年的計算結果加1日。
大雪日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=7.18,20世紀=7.9。
舉例說明:2088年大雪日期=[88×0.2422+7.18]-[88/4]=28-22=6,12月6日大雪。
例外:1954年的計算結果加1日。
冬至日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=21.94,20世紀=22.60。
舉例說明:2088年冬至日期=[88×0.2422+21.94]-[88/4]=43-22=21,12月21日冬至。
例外:1918年和2021年的計算結果減1日。
小寒日期的計算 [Y*D+C]-L
公式解讀:Y=年數后2位,D=0.2422,L=閏年數,21世紀C=5.4055,20世紀=6.11。
舉例說明:1988年小寒日期=[88×.0.2422+6.11]-[(88-1)/4]=27-21=6,1月6日小寒。
例外:1982年計算結果加1日,2019年減1日。
大寒日期的計算 [Y*D+C]-L
公式解讀:Y=年數的后2位,D=0.2422,L=閏年數,21世紀C=20.12,20世紀C=20.84。
舉例說明:2089年大寒日期=[89×0.2422+20.12]-[(89-1)/4]=41-22=19,1月19日大寒。
例外:2082年的計算結果加1日,20世紀無。
這些解說都來自于? ?二十四節氣計算公式 [Y×D+C]-L中的C是怎么規定的
public function get_solar(){header("Content-Type:text/html;charset=utf-8"); $year=date('Y');//獲取年份Y表示四位年份2020 y表示兩位年份20年$month=date('m');//獲取月份$day=date('d');//獲取當前日期//獲取當前年份的后兩位,若使用Y需要使用下面的substr來截取日期。$years = substr($year,-2)+0; //根據條件來篩選 數組第二位表示特殊年份 第三位表示特殊年份需要加1還是減1$parameter= array( array(5.4055,2019,-1),//小寒 array(20.12,2082,1),//大寒 array(3.87),//立春 array(18.74,2026,-1),//雨水 array(5.63),//驚蟄 array(20.646,2084,1),//春分 array(4.81),//清明 array(20.1),//谷雨 array(5.52,1911,1),//立夏 array(21.04,2008,1),//小滿 array(5.678,1902,1),//芒種 array(21.37,1928,1),//夏至 array(7.108,2016,1),//小暑 array(22.83,1922,1),//大暑 array(7.5,2002,1),//立秋 array(23.13),//處暑 array(7.646,1927,1),//白露 array(23.042,1942,1),//秋分 array(8.318),//寒露 array(23.438,2089,1),//霜降 array(7.438,2089,1),//立冬 array(22.36,1978,1),//小雪 array(7.18,1954,1),//大雪 array(21.94,2021,-1)//冬至 ); $term_name = array( "小寒","大寒","立春","雨水","驚蟄","春分","清明","谷雨", "立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑", "白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"); $index= ($month-1)*2;//獲取數組中的鍵 $_leap_value = floor(($years-1)/4); $day1 = floor($years*0.2422+$parameter[$index][0])-$_leap_value;//獲取這個月的第一個節氣日期if(isset($parameter[$index][1])&&$parameter[$index][1]==$year) $day1 += $parameter[$index][2];//判斷該節氣是否有特殊日期,有的話需要對其+-1天 $day2 = floor($years*0.2422+$parameter[$index+1][0])-$_leap_value;//獲取這個月的第二個節氣日期 if(isset($parameter[$index+1][1])&&$parameter[$index+1][1]==$year) $day2 += $parameter[$index+1][2];//判斷該節氣是否有特殊日期,有的話需要對其+-1天 $data=array();//根據條件進行判斷用day2和day1與day比較前提是day2一定大于day1的if($day<$day1){$data['name1']=$term_name[$index-1];$data['flag']=1;$data['name2']=$term_name[$index];}else if($day==$day1){$data['name1']=$term_name[$index];$data['flag']=2;$data['name2']=$term_name[$index];}else if($day>$day1 && $day<$day2){$data['name1']=$term_name[$index];$data['flag']=1;$data['name2']=$term_name[$index+1];}else if($day==$day2){$data['name1']=$term_name[$index+1];$data['flag']=2;$data['name2']=$term_name[$index+1];}else if($day>$day2){$data['name1']=$term_name[$index+1];$data['flag']=1;$data['name2']=$term_name[$index+2];}return $data;}//若name2=name1,那么今天就是一個節氣,當name2<>name1 那么name2表示下一個節氣,name1表示上一個節氣
?
借鑒原文的是??php 根據時間獲取二十四節氣,返回json? ---這個文章中有出錯的地方,所以我更改了,做了借鑒,感謝他們寫的文章給我借鑒
?
?
還有一篇文章,具有借鑒意義? ?PHP判斷節假日、農歷、節氣
總結
以上是生活随笔為你收集整理的PHP实现24节气的计算方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【负荷预测】基于神经网络的负荷预测和价格
- 下一篇: 玲珑酒器 艳美酒色