我想使用mysql和php检查日期和时间冲突。
我的时间戳是使用php代码格式化的,例如:
$timestamp_start = date("Y-m-d H:i:s", mktime(date("H", strtotime($start_time)), date("i", strtotime($start_time)), 0, $date[0], $date[1], $date[2]));
$timestamp_end = date("Y-m-d H:i:s", mktime(date("H", strtotime($end_time)), date("i", strtotime($end_time)), 0, $date[0], $date[1], $date[2]));
我会像下面这样进行mysql检查:
$sql = "SELECT * FROM `$info[table]` WHERE ((`timestamp_start` BETWEEN '$timestamp_start' AND '$timestamp_end') OR (`timestamp_end` BETWEEN '$timestamp_start' AND '$timestamp_end'))";
这是我从这里得到的代码!哈哈。
现在问题是,如果房间安排在2013年10月31日上午08:00到下午05:00,而其他人试图安排在2013年10月31日下午5:00到09:下午00点,他们收到一条消息,说明房间已经在使用中。现在我起初并不介意这一点,因为它迫使房间至少有30分钟的事件间隙,但我的老板说房间应该能够安排背靠背。
我如何修改我的sql语句,允许有人在05:00 PM预订房间,如果一直预订到05:00 PM?
这似乎有效
$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";
答案 0 :(得分:1)
BETWEEN
是包容性操作,例如
foo BETWEEN bar AND baz
相当于
(foo >= bar) AND (foo <= baz)
由于你想在截止时间上允许“重叠”,你将不得不放弃“BETWEEN”操作,并选择更乏味的写出
(foo >= bar) AND (foo < baz)
^--- non-inclusive
答案 1 :(得分:0)
在此处提出的另一个问题上找到了这个:
$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";
它似乎正在使用我做的有限测试。