二十四节气的日期规定:
太阳从黄经零度起,沿黄经每运行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 ---这个文章中有出错的地方,所以我更改了,做了借鉴,感谢他们写的文章给我借鉴