如果用户请求的DateTime与MYSQL数据库中已有的任何DateTime重叠,我一直在努力使用返回true
或false
的函数。
情况是用户可以通过iOS应用程序提交汽车租赁请求,它采用DateTime格式2014-04-02 08:49:43
。我正在使用Laravel作为管理后端的API。 Reservation
的表格是:
Schema::table('reservations', function($table)
{
$table->dateTime('from_date')->nullable();
$table->dateTime('to_date')->nullable();
});
所以我尝试了很多方法但是保留日期和时间没有重叠是过去2天的痛苦。我最接近的是这个功能,我认为(希望)这个功能是正确的,但缺少一些东西。
public function isSlotAvailable(Request $request) {
$appointments = Reservation::all();
$from = $request->from;
$to = $request->to;
foreach ($appointments as $appointment) {
$eventStart = Carbon::instance(
new DateTime($appointment['dt_start'])
);
$eventEnd = Carbon::instance(
new DateTime($appointment['dt_end'])
)->subSecond(1);
if ($from->between($eventStart, $eventEnd) ||
$to->between($eventStart, $eventEnd) ||
($eventStart->between($from, $to) && $eventEnd->between($from, $to)))
{
return false;
}
}
return true;
}
我从这个函数得到的错误是:
在字符串
上调用()之间的成员函数
我真的很感激任何帮助。
答案 0 :(得分:3)
而不是尝试在()之间使用,你可以检查
if($from<$eventEnd && $to>$eventStart){
return false;
}
对于所有情况都应该返回false,除非您的新事件在现有事件开始之前开始和结束,或者您的新事件在现有事件之后开始和结束。
这假设您已经在所有情况下检查了$from<$to
和$eventStart<$eventEnd
,我希望是这样的!