Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Const richtig bei timestamp (toTimeString)

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Const richtig bei timestamp (toTimeString)

    This topic has been deleted. Only users with topic management privileges can see it.
    • matze55
      matze55 last edited by matze55

      Hallo wieder mal ne dumme Frage meiner seits. Ich habe bei Google ein Code gefunden der mir beim Alexa Adapter alle Sprachaktionen in einer Json Tabelle im VIS ausspuckt. Klappt auch alles super. Nur wenn ich beim timestamp die const definiere mit dem Datum...will das nicht so.

      Scrennshot:
      screnn1.png

      Momentane anzeige:

      const newEntry = {
            timestamp: new Date().toISOString(),//Zeigt Käse an
            //date: new Date().toTimeString().slice(0,9,),//Alternative
            device: device,
            text: text,
            source: source
          };
      

      Wie kann ich es anzeigen lassen z.b. so

      16.Aug 2025 23.39.48 Uhr

      Bekomme es einfach nicht hin. Danke erst mal

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @matze55 last edited by

        @matze55

        Schau mal hier
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString

        matze55 2 Replies Last reply Reply Quote 0
        • matze55
          matze55 @OliverIO last edited by

          @oliverio danke versuche mal mein glück.

          1 Reply Last reply Reply Quote 0
          • matze55
            matze55 @OliverIO last edited by matze55

            @oliverio jäährr...du bist mein Retter hat geklappt. Super
            Der Code klappt super aber ..jetzt kommt es der Monatsname fehlt hast du da was in deiner zauberkiste ?

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @matze55 last edited by OliverIO

              @matze55

              Schaue unter den options. Da kann man sehr fein konfigurieren was ausgegeben werden soll.
              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString#using_options

              Leider hast u nicht gezeigt was du schon hast

              matze55 2 Replies Last reply Reply Quote 0
              • matze55
                matze55 @OliverIO last edited by matze55

                @oliverio Danke für deine Hilfe das hat geklappt mit den options. Ich habe folgendes getan. Ich wollte eine JSON tabelle für Alexa Sprachbefehle suchen aber hier nur das Log Script von Mic gefunden, was aber nicht mehr gepflegt wird, gefunden. Darauf hin gat mir die grosse Suchmaschine ein Code ausgespuckt wo ich die Sprachbefehle in eine JSON Tabelle schreibe und mir in der VIS anzeigen tut.

                Die Datenpunkte habe ich in 0_userdata angelegt. Da ich Fensterkontakte habe und die im Tuya Adapter intergriert sind fange ich dort true und false ab, bei geschlossenen und geöffneten Fenstern und habe per blockly worauf Alexa reagiert mit ihrer Stimme erstellt. Somit habe ich per JS den Code gefunden aber bin mit dem timestamp nicht klargekommen.

                Das war mein Anliegen aber jetzt klappt das Danke nochmals.

                1 Reply Last reply Reply Quote 0
                • matze55
                  matze55 @OliverIO last edited by matze55

                  @oliverio Ich habe mal noch eine Frage zu den timestamp. Kann man bei der Ausgabe beim timstamp die Texte ,,Heute,, und ,,Gestern,, integrieren. Die Definition ist momentan so definiert:

                  //Datum und Uhrzeit definieren per const
                      const opt = {
                      weekday: "short",//Langer Wochentag
                      year: "numeric",//Jahr wird per Zahl angezeigt
                      month: "short",//Kurzer Monatsname
                      day: "numeric",//Tag wird per Zahl angezeigt
                      hour : "numeric",//Stunde wird per Zahl angezeigt
                      minute : "numeric",//Minute wird per Zahl angezeigt
                      second : "numeric",//Sekunde wird per Zahl angezeigt aber ist aus
                      };
                      //End
                  

                  Es ist eine Rechenaufgabe die man gestalten kann, aber die Ausgabe gestaltet sich schwierig.

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @matze55 last edited by OliverIO

                    @matze55

                    ja rechenaufgabe. im js standard ist sowas nicht enthalten

                    function getRelativeDayLabel(dateInput) {
                      const inputDate = new Date(dateInput); // Kann Date, Timestamp oder ISO-String sein
                      const today = new Date();
                      
                      // Uhrzeit auf 00:00 setzen, damit nur der Tag verglichen wird
                      today.setHours(0, 0, 0, 0);
                      inputDate.setHours(0, 0, 0, 0);
                    
                      const diffInMs = today - inputDate;
                      const diffInDays = diffInMs / (1000 * 60 * 60 * 24);
                    
                      if (diffInDays === 0) {
                        return "heute";
                      } else if (diffInDays === 1) {
                        return "gestern";
                      } else if (diffInDays > 1) {
                        return "älter";
                      } else {
                        return "zukünftig"; // falls das Datum in der Zukunft liegt
                      }
                    }
                    

                    wo willst du das anwenden?

                    matze55 1 Reply Last reply Reply Quote 0
                    • matze55
                      matze55 @OliverIO last edited by matze55

                      @oliverio Danke für die Antwort ich will es hier integrieren denn so sieht der JS Code momentan aus:

                      // Datenpunkt für die JSON-Tabelle (anpassen!)
                      const jsonTableDp = '0_userdata.0.alexa.jsonTable';
                      
                      // Funktion zum Hinzufügen eines Eintrags zur Tabelle
                      function addJsonEntry(device, text, source) {
                        try {
                          // Datenpunkt vom Typ JSON erstellen oder aktualisieren
                          const currentState = getState(jsonTableDp).val;
                          let jsonTable = [];
                      
                          if (currentState && typeof currentState === 'string' && currentState.trim() !== '') {
                            jsonTable = JSON.parse(currentState);
                          }
                          //Datum und Uhrzeit definieren per const
                          const opt = {
                          weekday: "short",//Langer Wochentag
                          year: "numeric",//Jahr wird per Zahl angezeigt
                          month: "short",//Kurzer Monatsname
                          day: "numeric",//Tag wird per Zahl angezeigt
                          hour : "numeric",//Stunde wird per Zahl angezeigt
                          minute : "numeric",//Minute wird per Zahl angezeigt
                          second : "numeric",//Sekunde wird per Zahl angezeigt aber ist aus
                          };
                          //End
                          const newEntry = {
                            //timestamp: new Date().toISOString(),//Ausgeschalten
                            //date: new Date().toTimeString().slice(0,9,),//Ausgeschalten
                            date: new Date().toLocaleString('de-DE', opt),
                            device: device,
                            text: text,
                            source: source
                          };
                      
                          jsonTable.push(newEntry);
                      
                          setState(jsonTableDp, JSON.stringify(jsonTable), true);
                          log('Eintrag zur JSON-Tabelle hinzugefügt: ' + JSON.stringify(newEntry), 'info');
                      
                        } catch (error) {
                          log('Fehler beim Hinzufügen zum JSON: ' + error, 'error');
                        }
                      }
                      
                      
                      // Trigger für den Alexa-Adapter (Anpassen!)
                      on({id: 'alexa2.0.Echo-Devices.G090P30883460659.Commands.speak', change: "any"}, async function (obj) {
                        const deviceId = obj.id.split('.')[2];
                        const text = obj.state.val;
                      
                        if (text) {
                            addJsonEntry(deviceId, text, 'alexa2.0');
                        }
                      });
                      
                      ///TEST
                      
                      ///
                      
                      // Trigger für einen Datenpunkt (Beispiel)
                      /*on({id: '0_userdata.0.alexa.myTextSource', change: "any"}, async function (obj) {
                        const text = obj.state.val;
                      
                        if (text) {
                            addJsonEntry('MyCustomSource', text, 'Datenpunkt');
                        }
                      });*/
                      
                      // Optional: Skript zum Löschen der Tabelle (auf eigene Gefahr!)
                      on({id: '0_userdata.0.alexa.deleteJsonTable', change: "any"}, async function (obj) {
                        if (obj.state.val === true) {
                            setState(jsonTableDp, "[]", true);
                            log('JSON-Tabelle gelöscht.', 'warn');
                            setState('0_userdata.0.alexa.deleteJsonTable', false, true);
                        }
                      });
                      

                      Die Ausgabe erfolgt dann in der VIS. so werden die Sprachbefehle aufgelistet die ich per Blockly ansteuere. Wenn ich mich jetzt richtig ausdrücke.
                      Der timestamp mit dem Text ,,heute,, und ,,gestern,, sollte mit in die ,,const opt,, mit integriert sein. Ob das gehen würde.
                      Muss ich die funktion die du postet mit einfügen im JS oder muss das gesamte umgebaut werden.

                      mfg

                      OliverIO 1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @matze55 last edited by OliverIO

                        @matze55

                        In das const opt kannst du das nicht integrieren.
                        Aber du könntest Zeile 28 erweitern.
                        Allerdings würde es so aktuell ja immer heute ergeben, da new Date() immer den aktuellen Zeitpunkt ergibt.
                        Wo kommt das Datum her für das du das berechnen möchtest?

                        matze55 1 Reply Last reply Reply Quote 0
                        • matze55
                          matze55 @OliverIO last edited by matze55

                          @oliverio Zeile 28 da wird es in Json Eintrag geschrieben. Wenn das Licht eingeschalten wird ...wird der timestamp geschrieben...als Bsp. Das licht ist eingeschalten Heute um plapla ect.
                          Wenn ein Tag vergeht soll ja in der funktion die du hier postest..ensteht ja eine Differenz von 24 Stunden.

                          Ich habe mal deinen Code ausgetauscht was so aussieht:

                          function getRelativeDayLabel() {
                            const today = new Date().toLocaleString;
                            // Uhrzeit auf 00:00 setzen, damit nur der Tag verglichen wird
                            today.setHours(0, 0, 0, 0);
                            date.setHours(0, 0, 0, 0);
                            const diffInMs = today - date;
                            const diffDays = diffInMs / (24 * 60 * 60 * 1000);
                              if (diffDays === 0) {
                              return "Heute";
                              } else if (diffInDays === 1) {
                              return "Gestern";
                              } 
                              }
                          

                          und in der Ausgabe es geändert in:

                          date: new Date().toLocaleString('de-DE', getRelativeDayLabel),
                          

                          Ich habe es noch ein wenig angepasst für mich.

                          mfg

                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @matze55 last edited by OliverIO

                            @matze55

                            das dürfte so nicht funktionieren.
                            Es gibt kein Übergabeparameter
                            und date ist nicht gleich Date()

                            und das verstehe ich auch nicht.
                            du übergibst hier die referenz auf die funktion, der 2.Parameter muss aber eine Struktur wie dein const opt weiter oben.

                            date: new Date().toLocaleString('de-DE', getRelativeDayLabel),
                            
                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            938
                            Online

                            32.0k
                            Users

                            80.5k
                            Topics

                            1.3m
                            Posts

                            2
                            12
                            118
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo