In Drupal 8 speichert das Feld Nur Datum Daten in einer Varchar- Spalte in einem CCYY-MM-DD- Format, z . B. 2016-04-18 .
Daher können Sie nicht mehr einfach eine auf ( > = ), weniger als ( <= ) oder ähnlichen zeitstempelbasierten entityQuery basierende Entität ausführen.
Gibt es eine einfache Lösung, wie man damit umgeht? Insbesondere versuche ich, zwei Abfragen durchzuführen, eine, bei der das Datumsfeld zwischen 14 und 21 Tagen alt ist, und eine, bei der das Datumsfeld 21 und mehr Tage alt ist.
>=
funktioniert? 20160318> = 20160218XXXX-XX-XX
(2016-04-18) gespeichert , daher handelt es sich technisch gesehen nicht um eine Zahl, weshalb eine numerische Bedingung dagegen nicht gültig wäre.'2016-04-18' > '2016-03-18'
arbeitet für mich und'2014-04-18' > '2018-02-01'
kehrt zurückFALSE
. Ja, es ist ein Zeichenfolgenvergleich, aber angesichts des Zeichenfolgenformats sollte es funktionieren. Immerhin'1' < '2'
.'0001' < '2'
vielleicht mit.Antworten:
Ich mache viele solche Bedingungen in Entitätsabfragen, ich habe noch kein Problem festgestellt.
Die Hauptsache, die Sie beachten müssen, ist die Zeitzone, in der die Daten gespeichert werden (UTC). Sie müssen es in die Speicherzeitzone konvertieren (dafür gibt es eine Konstante), sonst ist Ihre Abfrage um einige Stunden deaktiviert.
Hier ist ein Beispiel, das auf etwas basiert, das ich mache. Wenn Sie nur Tage speichern, gibt es auch eine Konstante für die Formatierung.
quelle
2016-07-18T13:00:00
, aber Drupal hat die Konvertierung und den Vergleich mit diesem Setup ordnungsgemäß durchgeführt.