我有两个日期范围,其中一个范围Start_Time
和End_Time
来自MYSQL数据库,其他(用户)范围从6 p.m
到5 a.m
每天都有
现在我正在尝试比较两个范围,并确保用户输入-start time-(6p.m
到5 a.m
次日)不属于“Start_Time
”和“{{ 1}}“反之亦然。
数据库End_Time
和用户的开始时间和结束时间也是如此。
代码:
End_Time
到第二天6 p.m
)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;
如果用户日期(开始日期或结束日期)在数据库范围内,我需要打印“忙” 这个逻辑有时会起作用,有时它不起作用。
答案 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;
}
}