例如上班时间是8点半到12点,下午上班时间是13点30到17点。并已获取开始时间和结束时间。想计算这个时段内的有效时间,排除非上班时段。请问怎么写呢?

解决方案 »

  1.   

    有什么需求?这问题也问的也太不着调了,写MySQL查询语句吗?
      

  2.   

    看看这个吧,不过就是时间函数的使用问题罢了
    PHP语言中的函数有许多种,各种应用方式不同,实现的功能也不尽相同。我们在本文种为大家总结了PHP时间戳函数,希望能作为参考学习对象。一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下:echo strtotime(”2009-1-22″) 结果:1232553600说明:返回2009年1月22日0点0分0秒时间戳二,PHP时间戳函数获取英文文本日期时间 示例如下:便于比较,使用date将当时间戳与指定时间戳转换成系统时间(1)打印明天此时的时间戳strtotime(”+1 day”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 day”)) 结果:2009-01-23 09:40:25(2)打印昨天此时的时间戳strtotime(”-1 day”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 day”)) 结果:2009-01-21 09:40:25(3)打印下个星期此时的时间戳strtotime(”+1 week”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 week”)) 结果:2009-01-29 09:40:25(4)打印上个星期此时的时间戳strtotime(”-1 week”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 week”)) 结果:2009-01-15 09:40:25(5)打印指定下星期几的时间戳strtotime(”next Thursday”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”next Thursday”)) 结果:2009-01-29 00:00:00(6)打印指定上星期几的时间戳strtotime(”last Thursday”)当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25指定时间:echo date(”Y-m-d H:i:s”,strtotime(”last Thursday”)) 结果:2009-01-15 00:00:00以上PHP时间戳函数示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date() 格式化日期时间获取指定的时间戳,实现所需要的日期时间。
      

  3.   

    你用windows的计划程序执行也可以,控制几个时间段来让系统自动执行,写个XX.bat文件执行php文件也可以的,如;D:\AppServ\php5\php.exe -q D:\AppServ\www\ceshi\b.php,保存成XX.bat文件,计划程序执行一下,把你要实现功能的程序全部放在b.php文件中,
      

  4.   

    你首先需要告知:你打算是用 php 还是 mysql 来完成
      

  5.   

    $TIME_USED = time( ) - strtotime( $BEGIN_TIME );$TIME_USED就是所用的时间
    time() 就是现在的时间
    $BEGIN_TIME 就是开始时间
    $END_TIME 就是结束时间现在就想把$TIME_USED的非工作时间去掉,算出真正的有效时间(上班所用的时间)
      

  6.   

    基本算法$start = array( '8:30', '12:00', '13:30', '17:00');//工作时间段
    $input = array( '9:30', '20:00');//输入时间段$start = array_map('strtotime', $start);
    $input = array_map('strtotime', $input);if($input[0] < $start[1]) { //计算开始时间
      $s = max($start[0], $input[0]);
      $dt = $start[2] - $start[1];
    }else {
      $s = max($start[2], $input[0]);
      $dt = 0;
    }
    if($input[1] < $start[2]) { //计算结束时间
      $e = min($start[1], $input[1]);
      $dt = 0;
    }else {
      $e = min($start[3], $input[1]);
      $dt = $start[2] - $start[1];
    }
    echo date('H:i', $e-$s-$dt); //输出结果
      

  7.   

    xuzuning写可以了  不过strtotime 这函数没写出来  只需要添加多两个变量 这两个变量一个是 设定是否是节假日 另一个则是用来 改修不固定的时间 修改下xuzuning的<?php
    function time($Stime,$Etime)
    {
    $start = array( '8:30', '12:00', '13:30', '17:00');//工作时间段
    $input = array( $Stime, $Etime);//输入时间段

    $start = array_map('strtotime', $start);
    $input = array_map('strtotime', $input);

    if($input[0] < $start[1]) //计算开始时间

    $s = max($start[0], $input[0]);
    $dt = $start[2] - $start[1];
    }else {
    $s = max($start[2], $input[0]);
    $dt = 0;
    }
    if($input[1] < $start[2])//计算结束时间

    $e = min($start[1], $input[1]);
    $dt = 0;
    }
    else 
    {
    $e = min($start[3], $input[1]);
    $dt = $start[2] - $start[1];
    }
    echo date('H:i', $e-$s-$dt); //输出结果
    }
    如果你需要其他的修改 只要把固定的数值修改成变量 然后传入你的值就可以获取时间段
    给分 就给 xuzuning