我有两个日期范围的范围之一Start_Time
,并End_Time
从MySQL数据库和其他(用户)的范围来是从每天6 p.m
到5 a.m
现在,我尝试比较两个范围,并确保用户输入的-开始时间-(6p.m
到5 a.m
第二天)不会落在“ Start_Time
”和“ 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;
为了进行比较,我编写了一个函数,但是看起来并不总是这样:
function dateIsBetween($dbfrom1,$dbto1,$user_st,$user_et) {
$from = strtotime($dbfrom1);
$to = strtotime($dbto1);
$st = strtotime($user_st);
$et = strtotime($user_et);
echo "DB FROM:............ ".$from.PHP_EOL."DB TO:....".$to.PHP_EOL."ST Start Time:...... ".$st.PHP_EOL."ST End Time:".$et;
if (('$from' >= '$st' && '$from' < '$et') || ('$to' >= '$st' && '$to' <= '$et') || ('$from' <= '$st' && '$to' > '$et')) {
return 1;
}else {return 0;}
如果用户日期(开始日期或结束日期)在数据库范围内,则需要打印“忙”。
此逻辑有时会起作用,有时会不起作用。
我可能对此进行了简单化,但是在我的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;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句