[英]PHP comparing two Date Time ranges
I have two date ranges one of the ranges Start_Time
and End_Time
is coming from MYSQL database and other (user) range is on every day from 6 pm
to 5 am
我有两个日期范围,其中范围Start_Time
和End_Time
来自MYSQL数据库,而其他(用户)范围则是每天6 pm
至5 am
Now I am trying to compare two ranges and make sure user enters -start time- ( 6p.m
to 5 am
next day) does not fall in " Start_Time
" and " End_Time
" and vice versa. 现在,我尝试比较两个范围,并确保用户输入的-开始时间-( 6p.m
至第二天凌晨5 am
)不属于“ Start_Time
”和“ End_Time
”,反之亦然。
Same is also true with database End_Time
and user's start time and end time . 数据库End_Time
以及用户的开始时间和结束时间也是如此。
Code: 码:
6 pm
to next day 5 am
) 创建用户日期的开始和结束时间的格式,但是每天的时间都是固定的( 6 pm
至次日凌晨5 am
) User Start Time:...... 2015-04-18 18:00:00
User End Time:2015-04-19 05:00:00
Within the database: 在数据库内:
MySQL DB Start Time:............ 2015-04-19 00:50:00
MySQL DB End Time:....2015-04-19 23:50:00
For user dates time range is always between 6p.m
to 5p.m
. 对于用户日期,时间范围始终在6p.m
到5p.m
。 Only we have to modify the date. 只有我们必须修改日期。
To achieve user required range: 要达到用户要求的范围:
$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;
For comparison, I wrote a function but looks like this is not always working: 为了进行比较,我编写了一个函数,但看起来并非总是如此:
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;}
If the user date (start date or end date) falls within database range, I need to print "Busy". 如果用户日期(开始日期或结束日期)在数据库范围内,则需要打印“忙”。
This logic works sometime, sometime it does not work. 此逻辑有时会起作用,有时会不起作用。
I may have oversimplified this, but in my 3 test scenarios, as limited as they might be, are working. 我可能对此进行了简化,但是在我的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;
}
}
EDIT 编辑
I believe I had the params of the method backwards after re-reading. 我相信在重新阅读后,我对方法有一些反感。
Try this: 尝试这个:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.