0

我想使用 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 到晚上 9:00,他们收到一条消息,指出房间已在使用中。现在我一开始并不介意这一点,因为它迫使房间在事件之间至少有 30 分钟的间隔,但我的老板说房间应该能够背靠背安排。

如果一直预订到下午 05:00,如何修改我的 sql 语句以允许某人在下午 5:00 请求房间?

这似乎有效

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";
4

2 回答 2

1

BETWEEN是包容性操作,例如

 foo BETWEEN bar AND baz

相当于

 (foo >= bar) AND (foo <= baz)

由于您希望在截止时间上允许“重叠”,您将不得不放弃 `BETWEEN 操作,并进行更繁琐的写出

 (foo >= bar) AND (foo < baz)
                       ^--- non-inclusive
于 2013-10-24T17:06:00.080 回答
0

在此处提出的另一个问题上发现了这一点:

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";

它似乎正在使用我所做的有限测试。

于 2013-10-24T17:40:49.217 回答