`
抢街饭
  • 浏览: 45355 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

php日期方面

    博客分类:
  • php
阅读更多

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中,选择日期涉及到许多方面,包括时间处理、日期格式化、用户输入验证以及与数据库交互等。本文将深入探讨PHP中选择日期的相关知识点,帮助开发者更好地理解和使用这一功能。 1. **日期时间类(DateTime)** ...

    php日期节假日换算类

    综上所述,“php日期节假日换算类”涵盖了多方面的日期处理能力,对于需要处理农历日期的PHP开发者来说,是一个非常有价值的工具。它不仅能够方便地进行阳历与阴历的转换,还能提供干支纪年、生肖计算以及农历日期的...

    日期php学习

    在处理文件名和目录时,经常需要基于日期进行排序或命名,PHP的日期函数同样能在这方面提供帮助。你可以将日期转换为数字格式,然后轻松地进行比较或插入到文件名中。 总的来说,PHP提供了丰富的日期和时间处理功能...

    php 函数记录 及日期函数

    本篇将重点讨论PHP中的日期函数以及如何记录函数的使用。 日期函数在PHP中扮演着至关重要的角色,它们帮助我们处理和格式化时间数据。其中,`strtotime()`和`date()`是最常用的两个日期函数。 `strtotime()`函数是...

    php自写预约订房时间列表

    综上所述,构建PHP自写的预约订房时间列表涉及到数据结构设计、预约算法实现、前端交互、后端接口设计以及安全性和性能优化等多个方面。这是一个综合性的项目,需要开发者具备全面的技能和良好的问题解决能力。

    PHP获取指定日期是星期几的实现方法

    - 《php日期与时间用法总结》:这可能是对PHP中日期时间函数和特性的综合介绍,帮助用户更深入地理解和运用PHP日期时间相关功能。 - 《PHP数组(Array)操作技巧大全》:数组是PHP中极其重要的数据结构,这篇文章应该...

    PHP+Mysql+FullCalendar日历拖动与数据保存

    综上所述,"PHP+Mysql+FullCalendar日历拖动与数据保存"项目涵盖了Web开发的多个重要方面,包括前后端通信、数据库操作和用户体验优化,是学习和实践Web应用开发的好例子。通过深入理解并掌握这些技术,开发者可以...

    PHP从入门到精通 源码

    全书共分24章,包括初识PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、文件...

    PHP从入门到精通.pdf-入门教程.CHM

    全书共分27章,包括初识.PHP、PHP环境搭建和开发工具、PHP语言基础、流程控制语句、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与Session、图形图像处理技术、...

    php计算到指定日期还有多少天的方法

    1. PHP日期时间函数的使用 2. 计算时间差的方法和技巧 3. 代码实例与逻辑分析 ### 1. PHP日期时间函数的使用 PHP中的日期时间操作涉及多个函数,包括`date`、`strtotime` 和 `mktime` 等。`date` 函数可以格式化...

    PHP函数参考手册

    * PHP 安全:PHP 安全包括输入验证、数据加密、身份验证等方面。 PHP 数据库知识点: * MySQL 简介:MySQL 是一种流行的关系型数据库管理系统。 * MySQL 连接:PHP 提供了多种连接 MySQL 的方式,例如 mysqli、PDO...

    PHP博客型日历,能标识文章发表日期

    在IT行业中,PHP是一种广泛应用的服务器端脚本语言,尤其在构建动态网站方面表现出色。本文将深入探讨如何使用PHP创建一个博客型日历,它能够根据文章的发表日期在日历上进行标识。 首先,我们需要理解日历的基本...

    PHP工程师 - PHP从零基础到原生项目开发

    这将涵盖数据库设计、页面模板、路由控制等多个方面。随着技术的深入,可以尝试开发更复杂的项目,如电商网站、内容管理系统等,涉及到支付接口、权限控制、搜索功能等高级技术。在这个过程中,你将逐步熟练使用PHP...

    PHP生成、下载excel、zip压缩文件_excelphp图片_excel_zip_php_

    3. **插入数据**:使用`setCellValue`方法填充单元格数据,支持文本、数字、日期等类型。 4. **插入图片**:使用`createDrawing`方法创建一个图形对象,设置图片路径、位置和大小,然后使用`addDrawingToWorksheet`...

    PHP从入门到精通

    、PHP数组、PHP与Web页面交互、PHP与JavaScript交互、日期和时间、Cookie与 Session、图形图像处理技术、文件系统、面向对象、PHP加密技术、MySQL数据 库基础、phpMyAdmin图形化管理工具、PHP操作MySQL数据库、...

    韩顺平PHP从入门到精通完整集合(含资源)

    函数是PHP中的重要组成部分,教程中会深入解析内置函数的用法,如字符串处理函数、数组操作函数、日期与时间函数等,并且会引导学习者如何自定义函数,提升代码的复用性。面向对象编程也是PHP的一大特色,课程会介绍...

    PHP课件 PHP资料

    【PHP简介】 PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,尤其适合于Web开发并可嵌入HTML中...这份"PHP课件 PHP资料"应该包含这些方面的讲解,帮助初学者系统地学习和实践PHP编程。

    PHP核心教程 php pear php pear

    2. **字符串与数组处理**:字符串函数如str_replace、explode、implode,数组函数如array_push、array_pop、array_merge等,使得PHP在处理数据方面非常灵活。 3. **函数与类**:PHP支持函数式编程,可以自定义函数...

    JS日历插件日期选择器

    JavaScript(简称JS)是一种轻量级的脚本语言,广泛应用于网页和网络应用开发,尤其在前端界面交互方面发挥着重要作用。"JS日历插件日期选择器"是JavaScript技术在网页开发中的一种常见应用,它允许用户在网页上方便...

Global site tag (gtag.js) - Google Analytics