项目中有需求:判断指定日期,是否为节假日、双休日、工作日。简单想了下,双休日可能也上班,工作日可能休息。另外每年的节假日,放假时间,还真不知道!
自己做不出来,就在网上找答案:推荐一篇文章:https://www.aspirantzhang.com/learning/is-holiday.html没细看,看他里面提到了 'juhe.cn' 聚合数据,申请了下接口,免费用户每天100次,但是只能判断是否为 '假期',并不能判断,今天是否休息!例如:星期日,是休息日,但是得上班。在网上搜日历:百度:日历各种万年历哈,百度的、其他的...百度的就很好,但是分析了半天,找不到它调用的接口,最终找到了(本来都打算用其他家的了,也可以分析出来,但是肯定速度没百度的快!),处理了下,可以判断出来。这里分享下代码,laravel 框架的(不要吐槽代码质量,我就这水平)// 门面类(Facades)use Illuminate\Support\Facades\Cache;// 其他底层类use GuzzleHttp\Client;/*** 通过 『百度』 获取万年历 - 获取单月*/if ( !function_exists('baidu_calendar_days')) {function baidu_calendar_days($month = ''){$api_url = 'http://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={month}&co=&resource_id=6018';// 未传入日期,取当天日期if(empty($month)){$month = date('Y年n月');// 传入的是 『时间戳格式』}elseif(strpos($month, '-') === false){$month = date('Y年n月', $month);// 传入的是 『YYYY-MM-DD格式 或 YYYY-MM 等其他格式』}else{$month = date('Y年n月', strtotime($month));}$api_url = str_replace('{month}', $month, $api_url);// 借助 Guzzle 发起请求$client = new Client();$response = $client->request('GET', $api_url, ['headers' => [],// 发现 query 为 [],一直报错!(这里先记录下,按理说不应该报错!允许这种写法!)// 'query' => [// ],]);$body = $response->getBody();$content = $body->getContents();$content = mb_convert_encoding($content, 'UTF-8', 'GBK');$content_to_json = json_decode($content, true);if($content_to_json['status'] == 0){return error(0, '获取日期成功!', ['days' => $content_to_json['data'][0]]);}else{return error(1, '获取日期失败!');}}}/*** 通过 『百度』 获取万年历 - 判断当天是否休息*/if ( !function_exists('day_type')) {function day_type($date = ''){/*holiday - 节假日weekend - 双休weekday - 工作日*/// 获取月份$date = $date ?: date('Y-m-d');// 优先从缓存中获取$cache_key = 'day_type_' . $date;if(Cache::has($cache_key)){return Cache::get($cache_key);}$month = date('Y-n', strtotime($date));$days = baidu_calendar_days($month);if($days['errno'] != 0){$day_type = 'weekday';}else{// 如果当月存没有节假日,正常的周六、日休息if(empty($days['days']['holiday'])){$day_week = date('w', strtotime($date));if($day_week == 0 || $day_week == 6){return 'weekend';$day_type = 'weekend';}else{$day_type = 'weekday';}}else{// 如果当月存有节假日,我们优先判断是否节假日$day_type = '';foreach($days['days']['holiday'] as $holidays){foreach($holidays['list'] as $holiday){if(date('Y-n-j', strtotime($date)) == $holiday['date']){// 节假日中 status == 1,表示 '节假日'if($holiday['status'] == 1){$day_type = 'holiday';// 节假日中 status == 2,表示 '工作日'}elseif($holiday['status'] == 2){$day_type = 'weekday';}}}}// 未匹配到节假日,正常的周六、日休息if(empty($day_type)){// 未匹配到节假日,正常的周六、日休息$day_week = date('w', strtotime($date));if($day_week == 0 || $day_week == 6){$day_type = 'weekend';}else{$day_type = 'weekday';}}}}// 设置缓存Cache::forever($cache_key, $day_type);return $day_type;}}/*** 通过 'www.juhe.cn' 获取万年历*/if ( !function_exists('juhe_calendar_day')) {function juhe_calendar_day($date = ''){$app_key = 'cf144c4025f46dce0de5820a76c40090';$api_url = 'http://v.juhe.cn/calendar/day';// 未传入日期,取当天日期if(empty($date)){$date = date('Y-n-j');// 传入的是 『时间戳格式』}elseif(strpos($date, '-') === false){$date = date('Y-n-j', $date);// 传入的是 『YYYY-MM-DD格式』}else{$date = date('Y-n-j', strtotime($date));}// 借助 Guzzle 发起请求$client = new Client();$response = $client->request('GET', $api_url, ['query' => ['key' => $app_key,'date' => $date,],]);$body = $response->getBody();$content = $body->getContents();$content_to_json = json_decode($content, true);/*返回值判断:1.有 'holiday' 元素,说明是 '节假日',肯定 '休息'2.无 'holiday' 元素,其他时间,无法判断是否 '休息'*/if($content_to_json['error_code'] == 0){return error(0, '获取日期成功!', ['date' => $content_to_json['result']['data']]);}else{return error(1, '获取日期失败!失败原因:' . $content_to_json['reason']);}// https://www.baidu.com/cache/aladdin/ui/lunar6/lunar6.js?v=20170208}}/*** 通过 'https://wannianrili.51240.com/' 获取万年历 - 获取单月*/if ( !function_exists('wannianrili_calendar_days')) {function wannianrili_calendar_days($month = ''){$api_url = 'https://wannianrili.51240.com/ajax/?q=2018-06';// 这里返回的是 html 结构,我们可以使用 『QueryList』 来解析}}

判断指定日期是否为节假日、双休日、工作日相关推荐

  1. Python判断指定日期是不是法定节假日

    判断一个日期是否为工作日.节假日,有一个现成的库函数:chinesecalendar chinesecalendar · PyPI 1.安装 pip3 install chinesecalendar ...

  2. python代码判断指定日期是当前年的第多少天

    python代码判断指定日期是当前年的第多少天 #python代码判断指定日期是当前年的第多少天 #不适用标准库 def is_leap_year(year):"""判断 ...

  3. js通用判断指定日期是周几,是否是周六、周日

    通用判断指定日期是周几,是否是周六.周日 一.实际效果图 二.前端代码参考 HTML模板: <!DOCTYPE html> <html><head><meta ...

  4. 判断指定日期为当年第几天(Java实现)

    想要实现的功能是: 从键盘输入年.月.日判断这一天是本年的第几天 不妨先从一个更简单的程序开始入手: 从键盘输入2022年的月.日.要求通过程序输出该日期为2022年的第几天: 如2月2日为2022年 ...

  5. java中判断日期是当天_java中如何判断指定日期是不是今天

    java中如何判断指定日期是不是今天 发布时间:2020-06-19 10:35:23 来源:亿速云 阅读:150 作者:Leah java中如何判断指定日期是不是今天?相信很多新手小白还没学会这个技 ...

  6. Tushare判断指定日期股票是否ST

    tushare中没有在指定日期条件下判断股票是否是st,只有直接通过stock_basic获取当前的状态是否是st.但是我们在做量化策略回测时,选股通常要过滤当时股票是否处于st状态. 下面将定义一个 ...

  7. Excel如何判断指定日期所属季度

    如下图B列含有大量的日期,现在想要快速判断出B列各单元格日期所属季度. 在E列插入一列辅助列并录入下图内容. 在C2单元格输入公式=MATCH(MONTH(B2),$E$2:$E$5,1) ​ 然后将 ...

  8. python判断一个日期对应的节假日名

    安装依赖 安装chinesecalendar库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ chinesecalendar git ...

  9. Java中如何判断指定日期是不是今天

    1.判断LocalDateTime时间是否是今天 /**** @param localDateTime* @return: boolean* @since 1.0.0* @Description: 根 ...

最新文章

  1. 休眠后gpio状态_STM32休眠与唤醒
  2. 点击展开 表格_CAD怎么将excel表格的数据导入并且实时更新?
  3. 约数个数shlqsh
  4. 牛客题霸 SQL2 查找入职员工时间排名倒数第三的员工所有信息
  5. 《Java 核心技术卷1 第10版》学习笔记------对象克隆【对象拷贝】
  6. 解决mysql表被crash的一次维护始末
  7. 13-容器的端口映射
  8. 开元弧焊机器人编程_【数据】2019年中国焊接机器人市场发展现状与趋势分析...
  9. 自主芯片+国产系统!天河三号原型机研制完成,中国超算有望重回No.1
  10. 什么是接口?接口的定义和使用
  11. 用纯SQL插入image文件
  12. Ubuntu查看联想笔记本无线网卡内核并安装驱动
  13. 机器人操作系统--ROS系统安装配置详细教程及实践
  14. FLV格式视频转换成MP4格式教程
  15. 怎样把HTC G7的内存扩展到2GB
  16. matlab 去高光,Specular-Highlight-Mitigation-Removal-master
  17. Atlas:手淘Native容器化框架和思考
  18. webservice-SOAP报文抓取与分析
  19. C语言程序设计——volatile关键字、函数重入
  20. 逆变器的输出外特性分析

热门文章

  1. OI 守望者的逃离 c语言简洁注释 逻辑清晰
  2. Python中shadows name ‘xxxx’ from outer scope 警告全局变量、局部变量
  3. 洛谷P1312 [NOIP2011 提高组] Mayan 游戏 题解
  4. 分析kdump(vmcore)
  5. 《相逢时节》电视剧主题曲 《问秋风》
  6. Java基础—常用DOS命令
  7. 开发小程序40个技术窍门,纯干货!
  8. 前端如何准备大厂面试
  9. 关于新浪短链接多个参数问题
  10. 管理学经典定律汇粹及解析一览