ユーザが要求したDateTimeが既にMYSQLデータベースにあるDateTimeと重複している場合、true
またはfalse
を返す関数で苦労しています。指定された時間/日付の空き状況を返します
状況は、ユーザーがiOSアプリを経由してレンタカー要求を提出することができるということです、それはDateTime書式2014-04-02 08:49:43
でいます。私はバックエンドを管理するAPIとしてLaravelを使用しています。 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;
}
私は、この関数から取得するエラーは次のとおりです。文字列
上の()の間にメンバ関数へ
コール私は本当に任意の助けをいただければと思います。
は、チェックの間に存在している理由があります。いつでも予約を取ることはできません。 (1)予定が他のものの前に始まっているが、既存の の間で終了する場合(2)予定が終了した後に終了し、既存の の間に開始する場合(3)予定他のすべての前にスターターとは それはそれは既存の予定からいずれか一方または両方の日付とinteferes他のすべては、あなたがTEスロットをブロックする必要があります後に終了します。あなたのコードは(1)と(2)の世話をするだけです。 – leo0019
私はこれを何度かダブルチェックしました - 私はまだ私が正しいと思います。 –
この形式での私の日付と時刻 '2017年1月2日08:49:いくつかのケースで43'と機能が正確でない – leo0019