Probleme mit dem Calendar Form Field

  • Moin moin,

    in meinem Modul "Simple Reservation Calendar" verwende ich in einer Subform XML das Calendar Form Field.

    mod_itcs_reservation_calendar/subform.xml at main · LukasHH/mod_itcs_reservation_calendar
    This modul create a simple reservation calender. It is developed for Joomla 4 and can be used under Joomla 3.10. - mod_itcs_reservation_calendar/subform.xml at…
    github.com


    Das Modul hatte ich vor einiger Zeit angepasst, dass es unter Joomla 3.10.x und unter Joomla 4.x lauffähig ist. Allerdings habe ich immer wieder Probleme mit den gespeicherten Datum-Angaben, da das Form-Field immer eine Uhrzeit mit speichert.


    Ich habe herausgefunden, dass sich beim Speichern der Daten Joomla 3 und Joomla 4 unterschiedlich verhalten. Ich habe das Modul jeweils auf beide Joomla Versionen installiert und zur selben Zeit die gleichen Tage eingestellt. In der globalen Konfiguration von Joomla ist Berlin als Zeitzone eingestellt, was aktuell +2h zur UTC Zeit bedeutet.


    Nachdem ich (fast zur selben Zeit) jeweils den 05.09.2022 ausgewählt hatte, werden die Daten wie folgt gespeichert.

    In Joomla 3 wird gespeichert: 04.09.2022 22:00:00

    In Joomla 4 wird gespeichert: 05.09.2022 07:25:13

    Gibt es eine Möglichkeit dem Calendar Feld beizubringen, dass nur das gewählte Datum gespeichert wird? Unabhängig von den Zeitzonen und Uhrzeit?

    Macht es eher Sinn ein eigenes Form-Field (HTML5 input type=date) zu erstellen?
    bisher noch nicht vorhanden: https://github.com/joomla/joomla-cms/pull/37456
    Mein Test: https://jsfiddle.net/LukasHH/4pqw0o58/

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ich habe jetzt 2 Lösungsansätze und bin mir noch unschlüssig, welcher der bessere wäre:


    1. Lösungsansatz - das Calendar Form Field belassen


    Beim Auslesen und weiter verarbeiten der gespeicherten Daten (in der helper funktion), das Datum mit dem nachfolgenden Code in das ursprünglich gewählte Datum umwandeln.

    PHP
    // erstelle aus dem String ein Datum
    $cal_day = new Date($item->cal_day, new \DateTimeZone('UTC'));
    
    //weise die Zeitzone aus der Joomla-Konfiguration zu
    $cal_day->setTimezone(new \DateTimeZone(Factory::getConfig()->get('offset')));
    
    // setze die Uhrzeit auf 00:00 Uhr
    $cal_day->setTime(0, 0, 0);


    2. Lösungsansatz - eigenes Datum Feld erstellen


    Ich habe ein eigenes Form-Field auf Basis des HTML5 Element erstellt, welches nur das Datum und unabhängig von den Zeitzonen speichert.

    HTML
    <input type="date" id="date" name="date">

    Damit es jedoch durch das Calendar-Field ersetzt werden kann, muss man vorher eine mögliche Uhrzeit herausnehmen, so dass als Value-Wert nur das Datum in Form von "YYYY-MM-DD" übergeben wird.

    Was meint Ihr, was der bessere Lösungsansatz wäre?
    Oder gibt es noch etwas ganz anderes?

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ich habe herausgefunden, dass sich beim Speichern der Daten Joomla 3 und Joomla 4 unterschiedlich verhalten. Ich habe das Modul jeweils auf beide Joomla Versionen installiert und zur selben Zeit die gleichen Tage eingestellt. In der globalen Konfiguration von Joomla ist Berlin als Zeitzone eingestellt, was aktuell +2h zur UTC Zeit bedeutet.

    Bist du sicher, dass auch alle anderen Einstellungen übereinstimmen und nicht doch unterschiedliche Zeitzonen nagewendet werden?


    Die des Servers und die des Users sind ja auch noch möglich, wenn ich es richtig verstehe.


  • Das Phänomen tritt scheinbar hauptsächlich auf, wenn in der Joomla-Konfiguration eine Zeitzone eingestellt ist.


    In der XML der Subform ist beim Calendar-Field filter="server_utc" hinzugefügt, da ansonsten das Datum mit Uhrzeit des Servers gespeichert wird. Gerade unter Joomla 4 wird immer die aktuelle Uhrzeit +/- mitgespeichert. Unter Joomla 3 scheint es etwas anders zu sein, da immer von 00:00 Uhr ausgegangen wird.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ich habe jetzt mal zwei PR erstellt. Wer mag, kann gerne einmal testen und Feedback geben, welches die bessere Alternative ist.


    1. Lösungsansatz - das Calendar Form Field belassen

    Release 4.0.4-alpha · LukasHH/mod_itcs_reservation_calendar
    This is the alpha-version for testing the issiu #3 . See the Pull Request #5 for test.
    github.com


    2. Lösungsansatz - eigenes Form Field (Datum) auf Basis des HTML5 <input type="date">

    Release 4.0.4-alpha1 · LukasHH/mod_itcs_reservation_calendar
    This is the second Test-Version to Fixes #3 See the Pull Request #4 for test.
    github.com

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Hallo Astrid,

    danke für die Info. Ich werde dann wohl vorerst bei dem Calendar Form Field bleiben.


    Zuvor hatte ich die Klasse Date direkt aufgerufen mit new Date(). Doch aus irgendwelchen (mir nicht nachvollziehbaren Gründen) funktionierte das in einer Helper-Funktion jedoch nicht. Daher bin ich dazu übergegangen die PHP Funktionen direkt zu verwenden.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.