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 |
相关推荐
全书共分27章,包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...
、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与 Session、图形图像处理技术、文件系统、面向对象、PHP加密技术、MySQL数据 库基础、phpMyAdmin图形化管理工具、PHP操作MySQL数据库、...
全书共分4篇25章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...
全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件...
全书共分27章,包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...
本书从初学者角度出发,通过通俗易懂的语言,丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、...
全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件...
一种方法可以使用正则,但是正则其实理解起来蛮麻烦的,而且使用正则在检验有效性方面也不太好。这里提供一个方法,主要是使用strtotime和date函数进行检验。直接上函数: 复制代码 代码如下:/** * 校验日期格式...
全书共分27章,包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...
二、该程式是从phpStudy2011B改进而来,主要改动以下几个方面: 1、绿色集成,无须安装、更适合PHP程式打包发布 2、升级MySQL至5.1.57。超级权限帐号:root 密码:123456 3、集成memcached分布式内存对象缓存...
获取当前时间的MySql时间函数处理MySql时间日期的函数有很多,下面为您介绍的就是用于获取当前时间的MySql时间函数,如果您对此感兴趣的话,不妨一看下面为您介绍的MySql时间函数用于获取当前时间,该MySql时间函数...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...
PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中...