ZFSYS

PHP 根据日期获取节气

61

有两种方式

第一种(不准确,会有误差)

function getJieQi($_year,$month,$day)   
{   
         $year = substr($_year,-2)+0;   
         $coefficient = 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(      
         "小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨",      
         "立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑",      
         "白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");   

         $idx1 = ($month-1)*2;   
         $_leap_value = floor(($year-1)/4);   
         $day1 = floor($year*0.2422+$coefficient[$idx1][0])-$_leap_value;
         if(isset($coefficient[$idx1][1])&&$coefficient[$idx1][1]==$_year) $day1 += $coefficient[$idx1][2];   
         $day2 = floor($year*0.2422+$coefficient[$idx1+1][0])-$_leap_value;   
         if(isset($coefficient[$idx1+1][1])&&$coefficient[$idx1+1][1]==$_year) $day1 += $coefficient[$idx1+1][2];   
         $data=array();
         if($day<$day1){
             $data['name1']=$term_name[$idx1-1];
             $data['name2']=$term_name[$idx1-1].'后';
         }else if($day==$day1){
             $data['name1']=$term_name[$idx1];
             $data['name2']=$term_name[$idx1];
         }else if($day>$day1 && $day<$day2){
             $data['name1']=$term_name[$idx1];
             $data['name2']=$term_name[$idx1].'后';
         }else if($day==$day2){
             $data['name1']=$term_name[$idx1+1];
             $data['name2']=$term_name[$idx1+1];
         }else if($day>$day2){
             $data['name1']=$term_name[$idx1+1];
             $data['name2']=$term_name[$idx1+1].'后';
         }
         return $data;
}  

第二种方式 手动设置

function getJieQi($_year,$month,$day){
    $data_name = [
        ['小寒','2024-01-06 04:49:09'],
        ['大寒','2024-01-20 22:07:08'],
        ['立春','2024-02-04 16:26:53'],
        ['雨水','2024-02-19 12:12:58'],
        ['惊蛰','2024-03-05 10:22:31'],
        ['春分','2024-03-20 11:06:12'],
        ['清明','2024-04-04 15:02:03'],
        ['谷雨','2024-04-19 21:59:33'],
        ['立夏','2024-05-05 08:09:51'],
        ['小满','2024-05-20 20:59:17'],
        ['芒种','2024-06-05 12:09:40'],
        ['夏至','2024-06-21 04:50:46'],
        ['小暑','2024-07-06 22:19:49'],
        ['大暑','2024-07-22 15:44:11'],
        ['立秋','2024-08-07 08:09:01'],
        ['处暑','2024-08-22 22:54:48'],
        ['白露','2024-09-07 11:11:06'],
        ['秋分','2024-09-22 20:43:27'],
        ['寒露','2024-10-08 02:59:43'],
        ['霜降','2024-10-23 06:14:32'],
        ['立冬','2024-11-07 06:19:49'],
        ['小雪','2024-11-22 03:56:16'],
        ['大雪','2024-12-06 23:16:47'],
        ['冬至','2024-12-21 17:20:20'],
        ['小寒','2025-01-05 00:00:00'],

    ];
    // 判断当前提供的时间在哪个节气之前
    $time = strtotime($_year.'-'.$month.'-'.$day);
    $term_time = '';
    $term_name = '';
    $term_name2 = '';
    foreach($data_name as $k=>$v){
        $_time = strtotime(date("Y-m-d",strtotime($v[1])));
        if($time==$_time){
            $term_time = $_time;
            $term_name = $v[0];
            $term_name2 = $term_name;
            break;
        }elseif($time<$_time){
            $term_time = $_time;
            if($k>0){
                $term_name = $data_name[$k-1][0];
                $term_name2 = $term_name.'后';
            }else{
                $term_name = '';
                $term_name2 = '';
            }
            break;
        }else{
            $term_time = $_time;
            $term_name = $v[0];
            $term_name2 = $term_name.'后';
        }
    }
    return ['name1'=>$term_name,'name2'=>$term_name2];
}

name1==name2时 表示是当前节日

  • 没有任何评论
最新帖子
[站长推荐] 一些站长/创业者使用的工具推荐 590
HTML+JS 全选与取消全选功能 544
子枫内容系统更新记录 448
有没有人做百度小程序啊 446
PHP 按照指定数量切割字符串 391
php composer更换国内源 374
a链接一键安装ios应用 370
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 346
layui table 的宽度超出自动隐藏 342
怎么克服拖延症呀 338
最近热帖
[站长推荐] 一些站长/创业者使用的工具推荐 590
HTML+JS 全选与取消全选功能 544
子枫内容系统更新记录 448
有没有人做百度小程序啊 446
PHP 按照指定数量切割字符串 391
php composer更换国内源 374
a链接一键安装ios应用 370
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 346
layui table 的宽度超出自动隐藏 342
怎么克服拖延症呀 338
近期热议
开始使用 160