Ankündigung

Einklappen
Keine Ankündigung bisher.

Widget zur Auswahl von Datum und Uhrzeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Die beschriebene Abfolge ist richtig. Die Variable newval enthält dann das neu eingegebene Datum im Format ISO 8601 - laut Doku e.g. '2017-11-29T23:00:00.000Z'. Das Z am Ende bedeutet, dass dies die UTC-Zeit ist.

    Fügt man nach dem write-Befehl ein
    Code:
    alert (newval);
    ein erhält man nach Eingabe des Datums 26.2.2020 folgendes:

    Date.PNG

    Das Java Zeitobjekt und auch die an Deine items übergebenen Werte sind also eigentlich richtig. Wenn Du das Ergebnis aber als String übergibst, geht die Umrechnung der Zeitzone verloren.

    Übrigens: wenn man
    Code:
    alert(this.element.val());
    ausgibt, ist das Ergebnis
    Code:
    2/26/2020
    . Lässt sich damit etwas anfangen?

    EDIT: Formateinstellungen werden im Language File gemacht, das im Verzeichnis
    Code:
    vendor/JTSage/DateBox/js/i18n
    liegt. Die Einstellungen kannst Du direkt dort ändern, oder im Aufruf der Datebox überschreiben (override). Siehe hier.
    Sinnvoll wäre sicherlich, dem Widget solche Optionen als Parameter mitzugeben. Ich kann aber nicht versprechen, dass dies noch ins Release von V2.9 hinein kommt.
    Zuletzt geändert von wvhn; 29.02.2020, 10:00.

    Kommentar


      #17
      Zitat von wvhn Beitrag anzeigen
      neu eingegebene Datum im Format ISO 8601 - laut Doku e.g. '2017-11-29T23:00:00.000Z'. Das Z am Ende bedeutet, dass dies die UTC-Zeit ist.
      Wo hast Du das in der Doku gefunden? Ich habe bislang nur gefunden, dass die datebox nur das Datum ausgibt.

      Ich habe in meine visu.js folgenden Eintrag gemacht:
      Code:
      jQuery.extend(jQuery.jtsage.datebox.prototype.options, {overrideDateFormat: '%G-%m-%d', overrideHeaderFormat: '%G-%m-%d' });
      Damit kann man nur das Anzeigeformat, nicht aber das Format der Übergabe ändern.
      Zuletzt geändert von Sisamiwe; 29.02.2020, 12:11.

      Kommentar


        #18
        wvhn
        Ich bin ein Stück weiter.

        Wenn ich in der basic.js Zeile 651 den Eintrag mit ".toString()" ergänze

        Code:
        newval = this.element.datebox('getTheDate').toString();
        Sieht die Ausgabe so aus:
        Code:
        viessmann.heizkreis_a1m1.ferienprogramm.starttag = "Sat Feb 29 2020 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit)"
        Damit scheint alles korrekt zu sein.
        Nun gilt des das noch in das richtige Format zu bringen.


        EDIT:

        Hier ist auch eine Funktion beschrieben, wie mann in String mit Zeitzone wandelt.
        Ich habe aber keine Ahnung, wie und wo man die Funktion einbaut.
        Zuletzt geändert von Sisamiwe; 29.02.2020, 21:06.

        Kommentar


          #19
          war heute unterwegs und konnte mich nicht weiter damit beschäftigen. Danke für den Tipp im EDIT.
          Ich hab mal kurz im widget nach der Berechnung von newval folgenden Code ausprobiert:
          Code:
          var yyyy = newval.getFullYear().toString();
          var mm = (newval.getMonth()+1).toString(); // getMonth() is zero-based
          var dd = newval.getDate().toString();
          var newstring = yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
          Das Ergebnis von
          Code:
          alert(newstring);
          ist dann "2020-02-27" !!!

          Wenn das so passt, musst Du das Write-Statement noch ändern, um den String ins item zu schreiben:
          Code:
          this._write(newstring);
          Gruß Wolfram

          Kommentar


            #20
            Moin,

            die Lösung funktioniert, Ich musste erst lernen, dass der Code, der in Javascript bei der Bedingung "else if" ausgeführt werden soll in {} stehen muss.
            Ich habe dann noch eine andere Möglichkeit.

            Zur Dokumentation:
            A) Möchte man mit "basic.input" mit mit der Option "date" eine Datumsausgabe in YYYY-MM-DD unter Berücksichtung der eigenen Zeitzone, muss die basic.js wie folgt erweitert werden:
            Code:
                            else if(mode == 'datebox' || mode == 'flipbox' || mode == 'calbox' || mode == 'slidebox') { // data type date
                                var newdate = this.element.datebox('getTheDate');
                                var yyyy = newdate.getFullYear().toString();
                                var mm = (newdate.getMonth()+1).toString(); // getMonth() is zero-based
                                var dd = newdate.getDate().toString();
                                newval = yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
                            }

            B) Möchte man mit "basic.input" mit mit der Option "date" eine Datumsausgabe nach ISO 8601 mit Korrektur der eigenen Zeitzone, muss die basic.js ab Zeile 650 wie folgt erweitert werden:
            Code:
                            else if(mode == 'datebox' || mode == 'flipbox' || mode == 'calbox' || mode == 'slidebox') { // data type date
                                newval = this.element.datebox('getTheDate');
                                newval.setHours( newval.getHours() + 2 );    
                            }
            Hierbei werden einfach 2h auf das Datumelement addiert, so dass der Fehler ausgegelichen ist.

            Hintergrund: Beim Wandeln des Datumselements aus der "JTSage Datebox" in einen String im ISO-Format wird die eigene Zeitzone nicht mit berücksichtigt. Das bedeudet, wenn man das Datum 30.11.2017 wählt, ergibt sich im String daraus '2017-11-29T23:00:00.000Z' und damit eine Stunde zu wenig bzw. wenn man nur das Datum benötigt, sogar der falsche Tag.

            Beste Grüße

            Kommentar


              #21
              Cool.

              Ich sehe beide Lösungen jetzt mal als Workaround für Dich, weil Du weißt, was Du tust. Falls Du das Viessmann-Plugin veröffentlichst, müssen wir aber eine Lösung für die String-Ausgabe fest ins Widget basic.input einbauen, denn sonst gibt es bei jedem neuen Release wieder Versionskonflikte bei den Anwendern, die das Widget geändert haben.

              Kurzfristlösung: die selbst geänderte basic.js in das Verzeichnis
              Code:
              pages/<DeineSeiten>/widgets
              legen. Die wird in root.html später eingelesen als die originale basic.js und ist dann die verwendete Version.

              Mittelfristlösung: ich erweitere basic.input um eine Option, die das Datum als String ausgibt.

              Gruß Wolfram

              Kommentar


                #22
                Zitat von wvhn Beitrag anzeigen
                Kurzfristlösung: die selbst geänderte basic.js in das Verzeichnis
                So habe ich das schon gemacht.

                Zitat von wvhn Beitrag anzeigen
                Mittelfristlösung: ich erweitere basic.input um eine Option, die das Datum als String ausgibt.
                Für mich würde es reichen, wenn der String mit kompletten ISO Format '2017-11-29T23:00:00.000Z' das richtige Datum enthalten würde, also so dann '2017-11-30T00:00:00.000Z'. Ich würde dann mit einem eval in shNG nach 10 Stellen abschneiden.

                Für die Mittel- bzw. Langfristlösung: Für die Datebox sollte es folgende Optionen zum Einstellen und Ausgeben geben:
                • Nur Datumsausgabe YYYY-MM-DD
                • Nur Zeitausgabe Wahlweise mit Sekunden oder ohne
                • komplettes Datetime Element (Datum und Zeit) nach ISO 8601
                Ich kann dann gern helfen, wenn Du die Zeit findest.

                Kommentar


                  #23
                  Moin,

                  ich habe soeben eine neue Version von basic.html ins develop geschoben. Dort kann man in basic.input über eine zusätzliche Format-Option das Ausgabeformat des Datums als String veranlassen. Ohne Format-Parameter liefert das widget weiterhin das Javascript Zeit-Objekt. Als Format-Parameter lassen sich die JTSage Optionen angeben.
                  %Y-%m-%d steht z.B. für das gewünschte Format YYYY-MM-DD.

                  Bei der Zeit habe ich das nicht zum Laufen bekommen. Zwar klappt die Ausgabe der Zeit im gewünschten Format ins item, aber beim Update der Seite hat das widget die Zeit aus dem item nicht mehr erkannt und sich dann mit der aktuellen Zeit neu initialisiert. Das ist dann etwas für das nächste Release, ebenso wie der Datetime-Picker.

                  Gerne mal testen, ob das so passt!

                  Gruß
                  Wolfram

                  Kommentar


                    #24
                    Zitat von wvhn Beitrag anzeigen
                    Gerne mal testen, ob das so passt!
                    Funktioniert! Danke. Ich habe meinen Workaround wieder zurückgebaut.


                    Zitat von wvhn Beitrag anzeigen
                    ebenso wie der Datetime-Picker.
                    Das wäre echt super, denn dafür hätte ich nun auch eine Anwendung.

                    Kommentar

                    Lädt...
                    X