我有两个日期范围,其中一个范围的 Start_Time
和 End_Time
来自 MYSQL 数据库,另一个(用户)范围是每天从 晚上6点
到第二天的 早上5点
。
现在我正在尝试比较这两个范围,并确保用户输入的 -开始时间- (晚上6点
到第二天的 早上5点
) 不会落在 "Start_Time
" 和 "End_Time
" 之间,反之亦然。
数据库中的 End_Time
和用户的 开始时间 和 结束时间 也是如此。
代码:
- 创建用户日期的开始和结束时间格式,但每天的时间都是恒定的(
晚上6点
到第二天的早上5点
)
用户范围(例如):
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
对于用户来说,时间范围总是从 下午6点
到 下午5点
。我们只需要修改日期即可。
为了实现用户需要的时间范围:
$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;}
如果用户的日期(开始日期或结束日期)位于数据库范围内,我需要打印“忙碌”。
这个逻辑有时有效,有时无效。