Reputation: 53
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 p.m
to 5 a.m
Now I am trying to compare two ranges and make sure user enters -start time- (6p.m
to 5 a.m
next day) does not fall in "Start_Time
" and "End_Time
" and vice versa.
Same is also true with database End_Time
and user's start time and end time.
Code:
6 p.m
to next day 5 a.m
)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
. 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.
Upvotes: 3
Views: 3299
Reputation: 84
I may have oversimplified this, but in my 3 test scenarios, as limited as they might be, are working.
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;
}
}
Upvotes: 4