ThinkPHP中获取指定日期后工作日的具体日期方法

来源:中文源码网    浏览: 次    日期:2019年11月5日

【下载文档:  ThinkPHP中获取指定日期后工作日的具体日期方法.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

ThinkPHP中获取指定日期后工作日的具体日期方法思路:

1、获取到查询年份内所有工作日数据数组

2、获取到查询开始日期在工作日的索引

3、计算需查询日期索引

4、获得查询日期

/*创建日期类型记录表格*/CREATE TABLE `tb_workday` (`did` int(11) NOT NULL AUTO_INCREMENT,`exact_date` varchar(32) NOT NULL COMMENT '具体日期:格式date("Ymd");(20170205)',`date_year` varchar(32) NOT NULL COMMENT '具体日期:格式date("Y");(2017)',`date_type` tinyint(2) NOT NULL COMMENT '日期类型:0、工作日;1、特殊工作日;2、法定节假日',PRIMARY KEY (`did`)) ENGINE=InnoDB AUTO_INCREMENT=829 DEFAULT CHARSET=utf8 COMMENT='各年工作日&法定节假日数据' $_date) { $_ret = 0; $_date = date('Ymd', strtotime($_date)); $_post_data = array('date' => $_date); $_ret_curl = curl_post($url, $_post_data); $_ret_curl = json_decode($_ret_curl, true); //工作日 if ($_ret_curl['data'] == 0) { $dateData['exact_date'] = $_date; $dateData['date_year'] = $year; $dateData['date_type'] = 0; $_ret = $m->add($dateData) ? 1 : 0; unset($dateData); //工作日 判断是否为周末 if (in_array(self::get_week($_date), array(0, 1))) { //特殊工作日 $dateData['exact_date'] = $_date; $dateData['date_year'] = $year; $dateData['date_type'] = 1; $_ret = $m->add($dateData) ? 1 : 0; unset($dateData); } } //法定节假日 if ($_ret_curl['data'] == 2) { $dateData['exact_date'] = $_date; $dateData['date_year'] = $year; $dateData['date_type'] = 2; $_ret = $m->add($dateData) ? 1 : 0; unset($dateData); } //休息日(周末) 暂不处理 /*if ($_ret_curl['data'] == 1) { }*/ $_ret && $count++; unset($_date, $_post_data, $_ret_curl, $_ret); } return $count; } /** * 获取当年所有工作日 (从数据库获取,数据库无数据则先更新数据) * @param string $year 当年年份 * @return array */ private function getWorkDays($year) { $m = M('tb_workday'); $map['date_year'] = $year; $map['date_type'] = 0; $DateArray = $m->field('exact_date')->where($map)->select(); if (!empty($DateArray)) { $DateArray = array_column($DateArray, 'exact_date'); return $DateArray; } else { //更新数据库工作日数据 $ret = self::updateDate($year); if ($ret > 0) { return self::getWorkDays($year); } else { return false; } } } /** * 获取开始日期后第N个工作日具体日期 * @param $startdate string 计算开始日期 需包含年月日信息 * @param $days int 间隔天数 * @return mixed 成功返回 对应日期,失败返回false */ public function getNextWorkDate($startdate, $days) { $year = date('Y', strtotime($startdate)); $startdate = date('Y-m-d', strtotime($startdate)); $workDays = $this->getWorkDays($year); $search_key = array_search(date('Ymd', strtotime($startdate)), $workDays); if ($search_key === false) {//查询日期为非工作 //获取查询日期前最近工作日 $m = M('tb_workday'); $map['date_year'] = $year; $map['date_type'] = 0; $map['DATE_FORMAT(`exact_date`,\'%Y-%m-%d\')'] = array('LT', $startdate); $_search_date = $m->where($map)->order('`exact_date` DESC')->getField('exact_date'); $search_key = array_search($_search_date, $workDays); unset($m, $map, $_search_date); } $t_key = $search_key + $days; if ($t_key <= count($workDays) - 1) { return date('Y-m-d', strtotime($workDays[$t_key])); } else { //查询日期已跨年 $n_days = $days - (count($workDays) - 1 - $search_key); $next_year = $year + 1; return $this->getNextWorkDate($next_year . '-01-01', $n_days - 1); } }} $startdate = '2018-09-28';$days = 5; $class = new work_days();$_date_workday = $class->getNextWorkDate($startdate, $days);echo $_date_workday;//2018-10-10以上代码大家可以在本地测试一下,感谢大家对中文源码网的支持。

亲,试试微信扫码分享本页! *^_^*

php获取本月工作日,ThinkPHP中获取指定日期后工作日的具体日期方法相关推荐

  1. php获取工作日时间,ThinkPHP中获取指定日期后工作日的具体日期方法

    思路: 1.获取到查询年份内所有工作日数据数组 2.获取到查询开始日期在工作日的索引 3.计算需查询日期索引 4.获得查询日期 /*创建日期类型记录表格*/ CREATE TABLE `tb_work ...

  2. oracle获取指定日期内工作日的天数或节假日天数

    oracle 获取指定日期内工作日的天数 不必拘泥,可以反向思考 获取这段时期内周六日的天数,再用总天数减去周六日的天数,得到我们想要的 获取时间段内 所有日期 select to_date('202 ...

  3. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  4. ​​​​​​​​​​​​​​使用dom方式遍历文档||获取元素||从元素中获取数据

    使用dom方式遍历文档 获取元素 根据id查询元素getElementById 根据标签获取元素getElementsByTag 根据class获取元素getElementsByClass 根据属性获 ...

  5. java定时器任务中获取request对象 @Scheduled 获取request 对象 quartz中获取request对象

    java定时器任务中获取request对象 @Scheduled 获取request 对象 quartz中获取request对象 一.问题描述 1.在java定时任务中,使用 @Scheduled 注 ...

  6. mysql获取当月数据_MySQL中获取天、周、月等数据

    MySQL中获取天.周.月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 ...

  7. android获取imei兼容_Android中获取IMEI码的方法

    公共请求头 所有HTTP请求中,都包含如下公共请求头(HTTP Header): 名称 类型 是否必需 描述 Accept String 是 接受的返回类型,目前只支持JSON:application ...

  8. python获取绝对路径_python3中获取文件当前绝对路径的两种方法

    方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...

  9. php 什么函数获取ip,在PHP中获取ip地址的方法有哪些

    在PHP中获取ip地址的方法有哪些 发布时间:2021-02-15 18:37:36 来源:亿速云 阅读:97 作者:Leah 这篇文章给大家介绍在PHP中获取ip地址的方法有哪些,内容非常详细,感兴 ...

最新文章

  1. debian10新建文档_Debian 10(Buster)安装过程图文详解
  2. 学python能赚什么外卖-python实现外卖信息管理系统
  3. pthon3精要(12)-扩展序列解包
  4. mysql换成oracle_从mysql转换到oracle数据库
  5. 3dmax高版本转低版本插件_Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器...
  6. PHP一阶段 html+css+js 练习题汇总
  7. elasticsearch 在不是 not_analyzed 的前提下如何全匹配的效果
  8. easy WeChat 配置 企业微信代开发模板回调URL(PHP版本)
  9. Java类和对象之对象组合之求圆柱体积
  10. 正版鬼泣手游服务器,鬼泣手游
  11. 正則表達式基本使用方法简单介绍
  12. Self-Supervised Deep Blind Video Super-Resolution
  13. 绘图计算机配置,专业设计制图需要什么样的电脑?制图电脑配置要求 (全文)
  14. 三、Fiddler抓包工具 — Fiddler页面布局之菜单栏
  15. 别人家的键盘--机械键盘
  16. 【学习笔记】状态转移矩阵
  17. mysql综合案例 数据表的基本操作
  18. 1117—3.3v稳压芯片
  19. 【拓展】这篇文章把TCP/IP讲绝了!
  20. 一、图的定义,邻接矩阵和邻接表的实现

热门文章

  1. personalization icon is missing in UI
  2. Multiple Origin composition test - Opportunity Creation case
  3. Visual Studio Code设置断点时出现Unverified breakpoint该咋办
  4. SAP云平台里的日志系统概述
  5. 一个SAP顾问2018年的回顾
  6. 中leetcode提示未登录_分享一款将 LeetCode 中 AC 的题目转化为 MarkDown 表格的插件...
  7. java计算圆锥体积_六年级:美妙数学之“球的体积计算”(0430六)
  8. java 三个版本区别_关于java三个版本的区别
  9. jsp获取当前时间存入mysql数据库_jsp获取当前时间插入Mysql数据库?
  10. 关于python语言数值操作符、以下选项错误的是 答案是_关于Python注释,以下选项中描述错误的是...