首先,需要自己在后台创建一个表 content_cooper
这个结构如下:

CREATE TABLE `my_content_cooper` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '节假日记录表id',`year` tinyint(3) NOT NULL DEFAULT '1' COMMENT '年份',`name` tinyint(3) NOT NULL DEFAULT '1' COMMENT '节假日名称',`start_date` varchar(10) NOT NULL DEFAULT '2020-01-01' COMMENT '开始日期',`day_num` int(3) NOT NULL DEFAULT '3' COMMENT '放假时长(天数)',`need_date` varchar(255) DEFAULT NULL COMMENT '补班调休日期集合',`addtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,`status` tinyint(3) DEFAULT '1',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of my_content_cooper
-- ----------------------------
INSERT INTO `my_content_cooper` VALUES ('1', '1', '7', '2019-10-01', '7', '[\"2019-09-28\",\"2019-10-12\"]', '2019-10-21 22:12:23', '1');
INSERT INTO `my_content_cooper` VALUES ('2', '2', '1', '2020-01-01', '1', '[\"\"]', '2019-10-21 22:15:59', '1');

创建表并写入了两条数据,

//计算法定节假日的日期和补班的日期function get_legal_days($start_date, $end_date){//只能先根据开始时间 为基础查询出所有满足的法定节假日//然后在所有查询出来的结果中筛选没有超过结束日期的所有列表$start_date = date('Y-m-d',strtotime($start_date));$end_date = date('Y-m-d',strtotime($end_date));$where=[];$where['status'] = 1;$where['start_date'] = array('egt',$start_date);$content_cooper = db('content_cooper')->where($where)->field('id,start_date,day_num,need_date')->select();$holiday = [];//节假日日期列表$weekday = [];//上班日期foreach($content_cooper as $k=>$v){if($v['start_date'] <= $end_date){$holiday[]=$v['start_date'];}$now_start_date = $v['start_date'];//循环放假天数if($v['day_num'] > 1){for($i=1;$i<$v['day_num'];$i++){$now_date = strtotime($now_start_date) + 86400 * $i;$days_date= date('Y-m-d',$now_date);if($days_date <= $end_date){//满足在结束时间之内的日期$holiday[]=$days_date;}}}//计算补班的日期列表$need_date = json_decode($v['need_date'],true);foreach($need_date as $k1=>$v1){if( ($v1 >= $start_date) && ($v1 <= $end_date) ){$weekday[]=$v1;}}}return $holiday;//节假日}function get_legal_week_days($start_date, $end_date){//只能先根据开始时间 为基础查询出所有满足的法定节假日//然后在所有查询出来的结果中筛选没有超过结束日期的所有列表$start_date = date('Y-m-d',strtotime($start_date));$end_date = date('Y-m-d',strtotime($end_date));$where=[];$where['status'] = 1;$where['start_date'] = array('egt',$start_date);$content_cooper = db('content_cooper')->where($where)->field('id,start_date,day_num,need_date')->select();$weekday = [];//上班日期foreach($content_cooper as $k=>$v){//计算补班的日期列表$need_date = json_decode($v['need_date'],true);foreach($need_date as $k1=>$v1){if( ($v1 >= $start_date) && ($v1 <= $end_date) ){$weekday[]=$v1;}}}return $weekday;//上班列表}/* 计算一段时间内的除去节假日的工作日列表 */function get_work_days($start_date, $end_date) {$data = array();if (strtotime($start_date) > strtotime($end_date)) list($start_date, $end_date) = array($end_date, $start_date);//先计算出这段时间内的天数$days = round(abs(strtotime($end_date) - strtotime($start_date))/86400) + 1;$data=[];//年月日格式 2009-10-16$start_time=strtotime($start_date);$week_date_arr = get_weekend_days($start_date, $end_date);//周末的日期$holiday_date_arr = get_legal_days($start_date, $end_date);//法定节假日的日期$holiday_arr = (array_values(array_unique( array_merge($week_date_arr , $holiday_date_arr) ) ) );//所有的法定节假日和周末的日期集合sort($holiday_arr);$start_date_old = $start_date;for($i=0;$i<$days;$i++){$start_date=date('Y-m-d',$start_time);if(!in_array($start_date,$holiday_arr)){$data[]=$start_date;}$start_time += 86400;}//在加上需要补的法定节假日的调休$get_legal_days = get_legal_week_days($start_date_old, $end_date);//法定节假日的调休日期$data = array_values ( array_unique( array_merge($data , $get_legal_days) ) );sort($data);return $data;}

php获取一段时间内的法定工作日相关推荐

  1. oracle获取一段时间内所有的小时、天、月

    原文链接:http://blog.csdn.net/ld422586546/article/details/9626921/ 点击阅读原文 ------------------------------ ...

  2. 原生js获取一段时间内每隔几分钟的时间数组

    姊妹篇 原生js获取一段时间内每隔几天的时间数组 情况: 项目中有这么一个需求,输入开始时间.结束时间.时间间隔,获取一段时间内每隔几分钟的时间数组 接下来我必须现在网上找找有没有类似的稍微改改就好了 ...

  3. java 周几_java根据日期获取周几和获取某段时间内周几的日期

    整理两个日期的方法. 根据日期获取当天是周几 /** * 根据日期获取当天是周几 * @param datetime 日期 * @return 周几 */ public static String d ...

  4. Jquery获取一段时间内所有对应的日期,并获取日期对应的星期几。

    本文是将已知的一段时间(已知开始时间,结束时间),获取这一段时间内所有的日期,包含开始时间,结束时间,并对应星期几. 1,获取一段时间的字符串,返回的是字符串,调用时在后面加, /*** 获取日期段所 ...

  5. js获取一段时间内工作日的天数

    代码 function workday_count(start, end) {let count = 0;let current = start;while (current< end) {co ...

  6. python获取工作日_Python获取一段日期内的工作日和所有日期

    Pandas 1.获取工作日:bdate_range import pandas as pd e = pd.bdate_range('8/7/2019', '8/31/2019') e.date #获 ...

  7. java 时间段内月份_java获取某段时间内的月份列表

    /**获取两个时间节点之间的月份列表**/ private static List getMonthBetween(String minDate, String maxDate){ ArrayList ...

  8. PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延

    2016年11月1日 16:18:19 星期二 主要用到的函数是 strtotime() strtotime('+1 Tuesday', $timestamp) 获取下周二, 从时间戳$timesta ...

  9. SQL语句,统计一段时间内有多少个工作日

    declare @dts datetime,@dte datetime select @dts='2010-05-01',@dte='2010-06-1' select count(*) from m ...

最新文章

  1. 解决git clone慢问题
  2. Nvidia 安装相关文件下载地址
  3. Burpsuite工具的使用
  4. 雷死人不偿命-----六年级小学生的字条
  5. [刷题]算法竞赛入门经典(第2版) 4-3/UVa220 - Othello
  6. uniapp网络请求封装;小程序请求接口封装;uni.request接口封装
  7. 【STM32】HAL库 STM32CubeMX教程十---DAC
  8. python中说_name_没有被定义_python – 为什么我得到这个NameError:名称’url_for’没有定义?...
  9. java随机数生成字母,手撕面试官
  10. Ajax的一个体验:Ajax.NET - A free library for the Microsoft .NET Framework
  11. linux查看tomcat安装路径
  12. 李洪强iOS开发之OC[011] - 有参方法的声明实现以及调用练习
  13. 美女程序员,看到最后一个就亮了
  14. unity mapbox gis真实3D地图 地图上加载自己真实的建筑模型
  15. mysql计算同比和环比的区别_SQL 求同比 环比
  16. EOJ 1224 简单迷宫问题 bfs
  17. 1000行代码入门python-小白入门篇,Python到底是什么?
  18. 生产环境使用 pt-table-checksum 检查MySQL数据一致性
  19. 斜线/、反斜线\、双斜线//、双反斜线\\ ,区别
  20. sqlserver中的常见函数用法

热门文章

  1. python3.7通过itchat方式登录微信给好友发送天气信息
  2. 蜥蜴人传说的起源-[大卫艾克与科瑞多穆特瓦的访谈]
  3. 创业教父YC创始人Paul Graham就很烦鼓动年轻创业的
  4. WLAN旁挂组网二层直连
  5. window php ice安装,bootice怎么添加win10引导
  6. c++ opencv保存图片
  7. 计算机无法屏幕亮度,今天详解win10电脑屏幕亮度无法调节的具体解决手法
  8. JS实现答题上一题下一题
  9. 软件体系结构——层次风格
  10. java中equals方法重写详解(彻底搞定)