PHP比较两个日期时间范围

时间:2015-04-19 04:46:56

标签: php mysql datetime

我有两个日期范围,其中一个范围Start_TimeEnd_Time来自MYSQL数据库,其他(用户)范围从6 p.m5 a.m每天都有

现在我正在尝试比较两个范围,并确保用户输入-start time-(6p.m5 a.m次日)不属于“Start_Time”和“{{ 1}}“反之亦然。

数据库End_Time和用户的开始时间结束时间也是如此。

代码:

  1. 创建用户日期的开始和结束时间格式,但每天的时间不变(End_Time到第二天6 p.m
    用户范围(例如):
  2. 5 a.m

    在数据库中:

    User Start Time:...... 2015-04-18 18:00:00
    User End Time:2015-04-19 05:00:00
    

    对于用户日期,时间范围始终在MySQL DB Start Time:............ 2015-04-19 00:50:00 MySQL DB End Time:....2015-04-19 23:50:00 6p.m之间。只有我们必须修改日期。

    达到用户要求的范围:

    5p.m

    为了比较,我写了一个函数,但看起来并不总是有效:

    $sttime="18:00:00";
    $ettime="05:00:00";
    $teststartdate = date("Y-m-d");
    
    $teststartdatetime=$teststartdate." ".$sttime;
    
    #Calculate Endtime
    #$testendtime=date('Y-m-d', strtotime($teststartdate . ' + 1 day'))." ".$ettime; 
    

    如果用户日期(开始日期或结束日期)在数据库范围内,我需要打印“忙” 这个逻辑有时会起作用,有时它不起作用。

1 个答案:

答案 0 :(得分:1)

我可能过度简化了这一点,但在我的3个测试场景中,尽管它们可能有限,但仍在工作。

var_dump(dateIsBetween('2015-04-01 14:00:00', '2015-04-02 05:00:00', '2015-04-01 08:00:00', '2015-04-01 10:00:00'));
var_dump(dateIsBetween('2015-04-01 14:00:00', '2015-04-02 05:00:00', '2015-04-01 18:00:00', '2015-04-01 19:00:00'));
var_dump(dateIsBetween('2015-04-01 14:00:00', '2015-04-02 05:00:00', '2015-04-01 08:00:00', '2015-04-02 05:00:00'));

function dateIsBetween($dbfrom1,$dbto1,$user_st,$user_et) {

    if(((strtotime($user_st) >= strtotime($dbfrom1)) and (strtotime($user_st) <= strtotime($dbto1))) or (strtotime($user_et) >= strtotime($dbfrom1)) and (strtotime($user_et) <= strtotime($dbto1))) {

        return true;

    } else {

        return false;   

    }

}

修改

我相信在重新阅读之后,我的方法的参数就会倒退。

试试这个:

var_dump(dateIsBetween('2015-04-01 08:00:00', '2015-04-01 10:00:00', '2015-04-01 14:00:00', '2015-04-02 05:00:00'));
var_dump(dateIsBetween('2015-04-01 18:00:00', '2015-04-01 19:00:00', '2015-04-01 14:00:00', '2015-04-02 05:00:00'));
var_dump(dateIsBetween('2015-04-01 08:00:00', '2015-04-02 05:00:00', '2015-04-01 14:00:00', '2015-04-02 05:00:00'));

function dateIsBetween($dbfrom1,$dbto1,$user_st,$user_et) {


    if(((strtotime($dbfrom1) >= strtotime($user_st)) and (strtotime($dbfrom1) <= strtotime($user_et))) or (strtotime($dbto1) >= strtotime($user_st)) and (strtotime($dbto1) <= strtotime($user_et))) {

        return true;

    } else {

        return false;   

    }

}