ThinkPHP中如何获取指定日期后工作日的具体日期 (代码详解)
本篇文章给大家带来的内容是关于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='各年工作日&法定节假日数据'
<?php class work_days { /** * 获取星期 * @param $date * @return mixed */ function get_week($date) { //强制转换日期格式 $date_str = date('Y-m-d', strtotime($date)); //封装成数组 $arr = explode("-", $date_str); //参数赋值 //年 $year = $arr[0]; //月,输出2位整型,不够2位右对齐 $month = sprintf('%02d', $arr[1]); //日,输出2位整型,不够2位右对齐 $day = sprintf('%02d', $arr[2]); //时分秒默认赋值为0; $hour = $minute = $second = 0; //转换成时间戳 $strap = mktime($hour, $minute, $second, $month, $day, $year); //获取数字型星期几 $number_wk = date("w", $strap); //获取数字对应的星期 return $number_wk; //自定义星期数组 //$weekArr = array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); //获取数字对应的星期 //return $weekArr[$number_wk]; } /** * 获取指定日期段内每一天的日期 * @param string $startdate 开始日期 * @param string $enddate 结束日期 * @return array */ function getDateFromRange($startdate, $enddate) { $stimestamp = strtotime($startdate); $etimestamp = strtotime($enddate); // 计算日期段内有多少天 $days = ($etimestamp - $stimestamp) / 86400 + 1; // 保存每天日期 $_list_date = array(); for ($i = 0; $i < $days; $i++) { $_list_date[] = date('Y-m-d', $stimestamp + (86400 * $i)); } return $_list_date; } function curl_post($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; } /** * 更新数据库指定年份日期数据 * @param $year * @return int */ function updateDate($year) { $startDate = date('Y-m-d', strtotime($year . '-01-01')); $endDate = date('Y-m-d', strtotime('+1 year', strtotime($startDate)) - 86400); $_list_date = self::getDateFromRange($startDate, $endDate); $url = 'http://api.goseek.cn/Tools/holiday';//自行查找的免费API $m = M('tb_workday'); $count = 0; foreach ($_list_date as $k => $_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
以上是ThinkPHP中如何获取指定日期后工作日的具体日期 (代码详解)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7
