/

Datumsbereichs-Filter

Kumulative Datumsbereich-Filter-Tabs mit where_raw(), plus die eigenen Schnellauswahl-Voreinstellungen der Suchleiste für Datums-/Datetime-Spalten.

Kumulative Bereichs-Tabs mit where_raw()

Keiner der üblichen relativen Datums-Buckets - "diese Woche", "dieser Monat", "letzte 6 Monate" - hat eine "field OP value"-Form, die where() ausdrücken kann; CURDATE(), INTERVAL und YEARWEEK() sind MySQL-Funktionen, keine bindbaren Literale. where_raw($condition, $tab = null) ist hierfür das richtige Werkzeug - jeder Tab ist eine eigene, unabhängig signierte rohe SQL-Bedingung.

$xcrud->where_raw('DATE(paymentDate) = CURDATE()', 'Today');
$xcrud->where_raw('DATE(paymentDate) = CURDATE() - INTERVAL 1 DAY', 'Yesterday');
$xcrud->where_raw('YEARWEEK(paymentDate, 1) = YEARWEEK(CURDATE(), 1)', 'This Week');
$xcrud->where_raw(
    'YEAR(paymentDate) = YEAR(CURDATE()) AND MONTH(paymentDate) = MONTH(CURDATE())',
    'This Month'
);
$xcrud->where_raw('paymentDate >= CURDATE() - INTERVAL 6 MONTH', 'Last 6 Months');

Diese sind bewusst verschachtelt/kumulativ angelegt, keine strikt sich gegenseitig ausschließende Aufteilung - "This Week" ist eine Teilmenge von "This Month", welches wiederum eine Teilmenge von "Last 6 Months" ist, genau wie ein "Letzte 7 Tage / Letzte 30 Tage / Letzte 6 Monate"-Filter andernorts üblicherweise funktioniert. Eine strikte Aufteilung klingt sauberer, hat aber einen echten Grenzfall: Früh in einem Kalendermonat kann "dieser Monat, aber nicht in den letzten zwei Kalenderwochen" schlicht ein leerer Bereich sein. Verschachtelte Bereiche vermeiden das und entsprechen dem, was ein Besucher beim Klick auf "This Month" tatsächlich erwartet - alles aus diesem Monat, nicht alles aus diesem Monat außer dem Aktuelleren.

Parameter

ParameterTypStandardBeschreibung
$conditionstring-Rohe SQL-Bedingung, wörtlich eingefügt (geklammert). Nur vertrauenswürdiges, vom Entwickler geschriebenes SQL - niemals aus Request-Eingaben zusammenbauen.
$tabstring|nullnullTab-Beschriftung. Weglassen für einen dauerhaften Basisfilter statt eines umschaltbaren Tabs.

Die eigenen Schnellauswahl-Voreinstellungen der Suchleiste

Unabhängig von Filter-Tabs hat die einfache Suchleiste eine eigene JS-seitige Annehmlichkeit für Datums-/Datetime-Spalten. Öffnen Sie das "Spalten (n)"-Panel neben dem einfachen Suchfeld - dasselbe Panel, mit dem ausgewählt wird, welche Spalten die einfache Suche abdeckt - und jede Datums-/Datetime-Spalten-Checkbox hat darunter ein Schnellbereichs-Mini-Panel: ein Voreinstellungs-Dropdown (Jederzeit / Heute / Gestern / Diese Woche / Dieser Monat / Dieses Jahr / Benutzerdefinierter Bereich) plus ein bearbeitbares Von-Bis-Datumspaar, befüllt durch die jeweils gewählte Voreinstellung, aber danach weiterhin für Feinjustierung anpassbar.

Das ist eine reine clientseitige Annehmlichkeit zum schnellen Befüllen eines Datumsbereichs - kein PHP-Aufruf ist nötig, um sie zu aktivieren, jede Datums-/Datetime-Spalte erhält sie automatisch. Sie wird getrennt vom eigenen Bedingungszeilen des Advanced-Search-Panels erfasst, aber beide werden beim Neuladen des Grids in dieselbe Filteranfrage zusammengeführt, sodass ein Schnelldatumsbereich und eine erweiterte Bedingung gleichzeitig aktiv sein können.