Ich habe mit einer Funktion kämpfen, die true
oder false
zurückgibt, wenn die DateTime der Benutzer Anforderungen mit DateTime bereits in MYSQL-Datenbank überlappt.Retouren Verfügbarkeit für einen bestimmten Zeiten/Daten
Die Situation ist, dass Benutzer Autovermietungsanfragen über iOS-App einreichen können und es in DateTime-Format 2014-04-02 08:49:43
kommt. Ich benutze Laravel als API, um das Backend zu verwalten. Die Tabelle für Reservation
ist:
Schema::table('reservations', function($table)
{
$table->dateTime('from_date')->nullable();
$table->dateTime('to_date')->nullable();
});
So habe ich versucht, viele Methoden, aber Datum und Zeit der Reservierung ohne Überlappung ein Schmerz für die letzten 2 Tage gewesen. Das nächste, was ich zu tun habe, ist diese Funktion und ich denke (hoffentlich) diese Funktion ist richtig, aber etwas fehlt.
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;
}
Der Fehler, den ich aus dieser Funktion erhalten ist:
Anruf auf eine Elementfunktion zwischen() auf Zeichenfolge
ich wirklich jede Hilfe dankbar würde.
Das wird nicht funktionieren, es gibt einen Grund, warum die Zwischenprüfung da ist. Schreib einfach selbst auf, wenn und Termin nicht gebucht werden kann. Sie werden sehen, es gibt 3 Situationen: (1) Wenn der Termin vor allen anderen beginnt, endet aber zwischen eine bestehende (2) Wenn der Termin endet, nachdem alle anderen, sondern beginnt zwischen einem bestehenden (3) Wenn der Termin Starter vor allen anderen und endet nach allen anderen Es interferiert mit einem oder beiden Daten aus einem bestehenden Termin, sollten Sie Te-Slot blockieren. Dein Code kümmert sich nur um (1) und (2), denke ich. – leo0019
Ich habe das ein paar Mal doppelt überprüft - ich denke immer noch, dass ich recht habe. –
mein Datum und Uhrzeit in diesem Format '2017-01-02 08: 49: 43' und die Funktion in einigen Fällen nicht genau – leo0019