public function is_holiday(){
    //取出系统配置
    if(Redis::exists('sysconfig')){
        $sysconfig = json_decode(Redis::get('sysconfig'),true);
    }else{
        $sysconfig = Sysconfig::find(1);
        Redis::setex('sysconfig',600,json_encode($sysconfig));
    }

    //判断是否是节假日
    if(isset($sysconfig['holiday_control'])){
        //数据库字段 holiday_control 0-默认根据国家法定节假日,1-手动控制为节假日,2-手动控制为工作日
        if($sysconfig['holiday_control'] == 0){
            //取出缓存中本月的节假日列表
            if(Redis::exists('holiday_list')){
                $holiday_list = json_decode(Redis::get('holiday_list'),true);
                //判断今日是否是节假日
                if(in_array(date('d'),$holiday_list)){
                    $is_weekend = true;//是节假日
                }else{
                    $is_weekend = false;
                }
            }else{
                //用API获取本月所有的节假日
                $url = "http://www.easybots.cn/api/holiday.php?m=".date('Ym');
                $file = file_get_contents($url);
                $json = json_decode($file,true);

                //处理节假日数据并缓存到Redis
                $holiday_list = array();
                foreach($json as $value){
                    foreach($value as $key => $val){
                        if($val != 0){
                            $holiday_list[] = $key;
                        }
                    }
                }

                //计算Redis过期时间
                $begin_time = time();
                $end_time = mktime(23,59,59,date('m'),date('t'),date('Y'));

                //缓存到Redis
                Redis::setex('holiday_list',$end_time-$begin_time,json_encode($holiday_list));

                //进行判断是否是节假日
                if(in_array(date('d'),$holiday_list)){
                    $is_weekend = true;//是节假日
                }else{
                    $is_weekend = false;
                }
            }
        }elseif($sysconfig['holiday_control'] == 1){
            //如果 holiday_control 不为0,就是手动控制节假日,1是节假日,2是工作日
            $is_weekend = true;//是节假日
        }else{
            $is_weekend = false;
        }
    }else{
        //如果数据库不存在节假日控制字段,便使用最原始的判断是否周末控制
        if(date('w') == 6 or date('w') == 0){
            $is_weekend = true;//是周末
        }else{
            $is_weekend = false;
        }
    }
    return $is_weekend;
}

版权声明:本文为qvanminpiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qvanminpiao/article/details/103133645