date_default_timezone_set('PRC'); /** * 求取从某日起经过一定天数后的日期, * 排除周六周日和节假日 * @param $start 开始日期 * @param $offset 经过天数 * @param $exception 例外的节假日 * @param $allow 允许的日期(预留参数) * @return * examples:输入(2010-06-25,5,''),得到2010-07-02 */ function getEndDay( $start='now', $offset=0, $exception='', $allow='' ){ //先计算不排除周六周日及节假日的结果 $starttime = strtotime($start); $endtime = $starttime + $offset * 24 * 3600; $end = date('Y-m-d', $endtime); //然后计算周六周日引起的偏移 $weekday = date('N', $starttime);//得到星期值:1-7 $remain = $offset % 7; $newoffset = 2 * ($offset - $remain) / 7;//每一周需重新计算两天 if( $remain > 0 ){//周余凑整 $tmp = $weekday + $remain; if( $tmp >= 7 ){ $newoffset += 2; }else if( $tmp == 6 ){ $newoffset += 1; } //考虑当前为周六周日的情况 if( $weekday == 6 ){ $newoffset -= 1; }else if( $weekday == 7 ){ $newoffset -= 2; } } //再计算节假日引起的偏移 if( is_array($exception) ){//多个节假日 foreach ($exception as $day){ $tmp_time = strtotime($day); if( $tmp_time>$starttime && $tmp_time<=$endtime ){//在范围(a,b]内 $weekday_t = date('N', $tmp_time); if($weekday_t <= 5){//防止节假日与周末重复 $newoffset += 1; } } } }else{//单个节假日 if( $exception!='' ){ $tmp_time = strtotime($exception); if( $tmp_time>$starttime && $tmp_time<=$endtime ){ $weekday_t = date('N', $tmp_time); if($weekday_t <= 5){ $newoffset += 1; } } } } //根据偏移天数,递归做等价运算 if($newoffset > 0){ #echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}]"."<br />\n"; return getEndDay($end,$newoffset,$exception,$allow); }else{ return $end; } } /** * 暴力循环方法 */ function getEndDay2( $start='now', $offset=0, $exception='', $allow='' ){ $starttime = strtotime($start); $tmptime = $starttime + 24*3600; while( $offset > 0 ){ $weekday = date('N', $tmptime); $tmpday = date('Y-m-d', $tmptime); $bfd = false;//是否节假日 if(is_array($exception)){ $bfd = in_array($tmpday,$exception); }else{ $bfd = ($exception==$tmpday); } if( $weekday<=5 && !$bfd){//不是周末和节假日 $offset--; #echo "tmpday={$tmpday}"."<br />"; } $tmptime += 24*3600; } return $tmpday; } $exception = array( '2010-01-01','2010-01-02','2010-01-03', '2010-04-03','2010-04-04','2010-04-05', '2010-05-01','2010-05-02','2010-05-03', '2010-06-14','2010-06-15','2010-06-16', '2010-09-22','2010-09-23','2010-09-24', '2010-10-01','2010-10-02','2010-10-03','2010-10-04', '2010-10-05','2010-10-06','2010-10-07', ); //echo getEndDay('2010-08-27',3,''); //echo getEndDay('2010-06-25',15,'2010-07-07'); $t1 = microtime(); echo getEndDay('2010-05-12',66,$exception)."<br />"; $t2 = microtime();echo "use ".($t2-$t1)." s <br />"; echo getEndDay2('2010-05-12',66,$exception)."<br />"; $t3 = microtime();echo "use ".($t3-$t2)." s <br />"; //转载 http://bbs.phpchina.com/thread-186689-1-1.html |
相关推荐
在PHP中,选择日期涉及到许多方面,包括时间处理、日期格式化、用户输入验证以及与数据库交互等。本文将深入探讨PHP中选择日期的相关知识点,帮助开发者更好地理解和使用这一功能。 1. **日期时间类(DateTime)** ...
综上所述,“php日期节假日换算类”涵盖了多方面的日期处理能力,对于需要处理农历日期的PHP开发者来说,是一个非常有价值的工具。它不仅能够方便地进行阳历与阴历的转换,还能提供干支纪年、生肖计算以及农历日期的...
在处理文件名和目录时,经常需要基于日期进行排序或命名,PHP的日期函数同样能在这方面提供帮助。你可以将日期转换为数字格式,然后轻松地进行比较或插入到文件名中。 总的来说,PHP提供了丰富的日期和时间处理功能...
本篇将重点讨论PHP中的日期函数以及如何记录函数的使用。 日期函数在PHP中扮演着至关重要的角色,它们帮助我们处理和格式化时间数据。其中,`strtotime()`和`date()`是最常用的两个日期函数。 `strtotime()`函数是...
综上所述,构建PHP自写的预约订房时间列表涉及到数据结构设计、预约算法实现、前端交互、后端接口设计以及安全性和性能优化等多个方面。这是一个综合性的项目,需要开发者具备全面的技能和良好的问题解决能力。
- 《php日期与时间用法总结》:这可能是对PHP中日期时间函数和特性的综合介绍,帮助用户更深入地理解和运用PHP日期时间相关功能。 - 《PHP数组(Array)操作技巧大全》:数组是PHP中极其重要的数据结构,这篇文章应该...
综上所述,"PHP+Mysql+FullCalendar日历拖动与数据保存"项目涵盖了Web开发的多个重要方面,包括前后端通信、数据库操作和用户体验优化,是学习和实践Web应用开发的好例子。通过深入理解并掌握这些技术,开发者可以...
全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件...
全书共分27章,包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...
1. PHP日期时间函数的使用 2. 计算时间差的方法和技巧 3. 代码实例与逻辑分析 ### 1. PHP日期时间函数的使用 PHP中的日期时间操作涉及多个函数,包括`date`、`strtotime` 和 `mktime` 等。`date` 函数可以格式化...
* PHP 安全:PHP 安全包括输入验证、数据加密、身份验证等方面。 PHP 数据库知识点: * MySQL 简介:MySQL 是一种流行的关系型数据库管理系统。 * MySQL 连接:PHP 提供了多种连接 MySQL 的方式,例如 mysqli、PDO...
在IT行业中,PHP是一种广泛应用的服务器端脚本语言,尤其在构建动态网站方面表现出色。本文将深入探讨如何使用PHP创建一个博客型日历,它能够根据文章的发表日期在日历上进行标识。 首先,我们需要理解日历的基本...
这将涵盖数据库设计、页面模板、路由控制等多个方面。随着技术的深入,可以尝试开发更复杂的项目,如电商网站、内容管理系统等,涉及到支付接口、权限控制、搜索功能等高级技术。在这个过程中,你将逐步熟练使用PHP...
3. **插入数据**:使用`setCellValue`方法填充单元格数据,支持文本、数字、日期等类型。 4. **插入图片**:使用`createDrawing`方法创建一个图形对象,设置图片路径、位置和大小,然后使用`addDrawingToWorksheet`...
、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与 Session、图形图像处理技术、文件系统、面向对象、PHP加密技术、MySQL数据 库基础、phpMyAdmin图形化管理工具、PHP操作MySQL数据库、...
函数是PHP中的重要组成部分,教程中会深入解析内置函数的用法,如字符串处理函数、数组操作函数、日期与时间函数等,并且会引导学习者如何自定义函数,提升代码的复用性。面向对象编程也是PHP的一大特色,课程会介绍...
【PHP简介】 PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,尤其适合于Web开发并可嵌入HTML中...这份"PHP课件 PHP资料"应该包含这些方面的讲解,帮助初学者系统地学习和实践PHP编程。
2. **字符串与数组处理**:字符串函数如str_replace、explode、implode,数组函数如array_push、array_pop、array_merge等,使得PHP在处理数据方面非常灵活。 3. **函数与类**:PHP支持函数式编程,可以自定义函数...
JavaScript(简称JS)是一种轻量级的脚本语言,广泛应用于网页和网络应用开发,尤其在前端界面交互方面发挥着重要作用。"JS日历插件日期选择器"是JavaScript技术在网页开发中的一种常见应用,它允许用户在网页上方便...