Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Timestamp Umwandeln in Node Red (gelöst)

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Timestamp Umwandeln in Node Red (gelöst)

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

      Hi, kann mir vielleicht jemand sagen wie ich einen Timestamp von einer Input Node bzw. Get Node in ein anderes Format (Jahr, Monat, Tag, Stunden, Minuten) umwandeln kann?
      Timestamp1.jpg

      R mickym 2 Replies Last reply Reply Quote 0
      • R
        rewenode @frankyboy73 last edited by

        @frankyboy73 Da gibt es wie immer mehrere Möglichkeiten 😉 Hier mal 2 Varianten:

        [
            {
                "id": "6e4722f.e292adc",
                "type": "inject",
                "z": "a57304f5.446898",
                "name": "JSONata $now()",
                "props": [
                    {
                        "p": "payload"
                    },
                    {
                        "p": "topic",
                        "vt": "str"
                    }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "$now('[H01]:[m01]')",
                "payloadType": "jsonata",
                "x": 340,
                "y": 400,
                "wires": [
                    [
                        "5110edff.d90ee4"
                    ]
                ]
            },
            {
                "id": "5110edff.d90ee4",
                "type": "debug",
                "z": "a57304f5.446898",
                "name": "",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "true",
                "targetType": "full",
                "statusVal": "",
                "statusType": "auto",
                "x": 810,
                "y": 400,
                "wires": []
            },
            {
                "id": "be36aed3.a4a7d",
                "type": "inject",
                "z": "a57304f5.446898",
                "name": "",
                "props": [
                    {
                        "p": "payload"
                    },
                    {
                        "p": "topic",
                        "vt": "str"
                    }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 350,
                "y": 500,
                "wires": [
                    [
                        "24eea9de.83b826"
                    ]
                ]
            },
            {
                "id": "24eea9de.83b826",
                "type": "function",
                "z": "a57304f5.446898",
                "name": "dTime",
                "func": "// function mydTime()\n// this function returns actual date/time as dd.mm.yy hh:mm:ss \n\nvar options = {\n        hour: 'numeric',\n        minute: 'numeric',\n        second: 'numeric'\n    };\n\nglobal.set(\"mydTime\", function () {\n    return ((new Date()).toLocaleDateString('de-DE', options))\n})\n\n\n\n\nnode.status({fill:\"green\",shape:\"dot\",text:global.get(\"mydTime\")()});\nreturn msg;\n",
                "outputs": 1,
                "noerr": 0,
                "initialize": "",
                "finalize": "",
                "x": 530,
                "y": 500,
                "wires": [
                    [
                        "5110edff.d90ee4"
                    ]
                ]
            }
        ]
        

        2021-01-09_11-41-52.png

        1. JSONata $now()
          Nähere Infos findest du hier:
          Beschreibung $now()

        2. Plain Javascript im function-node

        var options = {
                hour: 'numeric',
                minute: 'numeric',
                second: 'numeric'
            };
        
        global.set("mydTime", function () {
            return ((new Date()).toLocaleDateString('de-DE', options))
        })
        

        Da musst du dich mit dem JD Date Object auseinandersetzen.
        Näheres z.B. hier:
        Javascript Date()

        Gruß Reiner

        F 1 Reply Last reply Reply Quote 1
        • F
          frankyboy73 @rewenode last edited by frankyboy73

          @rewenode Hi, vielen Dank für deine Antwort. Deine Funktion macht nur leider das genaue Gegenteil von dem was ich gesucht habe. Die wandelt das Datum wieder in Millisekunden um.
          Timestamp2.jpg

          Edit: Hatte gedacht ich hätte ne Lösung gefunden und hier auch gepostet, aber da hatte ich mir den Timestamp nur ins aktuelle Datum umgewandelt und nicht den Timestamp selber. Deshalb Post Editiert und wieder entfernt.

          R 1 Reply Last reply Reply Quote 0
          • R
            rewenode @frankyboy73 last edited by

            @frankyboy73 Ich hab ja nicht gesagt, dass ich dein konkretes Problem lösen will. Ich habe dir nur 2 Wege aufgezeigt, wie man das lösen kann.
            In meinem Beispiel gebe ich beim Funktion-node einen formatierten Datumsstring unter dem Node aus.
            Aber natürlich kannst du den auch im payload haben.

            2021-01-09_13-56-20.png

            Dazu musst du den payload entsprechend füllen.
            Wie dein Format konkret zu formatieren ist, kannst du den Links entnehmen.

            msg.payload = global.get("mydTime")();
            
            F 1 Reply Last reply Reply Quote 0
            • F
              frankyboy73 @rewenode last edited by frankyboy73

              @rewenode Hi, ok das habe ich wohl falsch verstanden oder überlesen 😁 . Ich dachte die Funktion Node sollte die Funktion haben die ich suchte.
              Vielen Dank für die verlinkten Seiten, nach viel lesen und rumprobieren, bin ich jetzt zu einer Lösung gekommen. Ich wandle die Nachricht (msg.payload.ts) ins Date Format um, ziehe mir die einzelnen Daten ( Jahr, Monat, Tage usw.) aus der Nachricht und setzte sie nacher wieder als neue Nachricht mit dem gleichen Namen zusammen.
              Timestamp3.jpg

              var dt = new Date(msg.payload.ts);
              
              var Monat = dt.getMonth() + 1;
              var Tag = dt.getDate();
              var Jahr = dt.getFullYear();
              var Stunde = dt.getHours();
              var Minute = dt.getMinutes();
              var Sekunde = dt.getSeconds();
              if(Monat.toString().length == 1) {
              var Monat = '0'+Monat;
              }
              if(Tag.toString().length == 1) {
              var Tag = '0'+Tag;
              }
              if(Stunde.toString().length == 1) {
              var Stunde = '0'+Stunde;
              }
              if(Minute.toString().length == 1) {
              var Minute = '0'+Minute;
              }
              if(Sekunde.toString().length == 1) {
              var Sekunde = '0'+Sekunde;
              }
              
              msg.payload.ts = Tag+'-'+Monat+'-'+Jahr+' / '+Stunde+':'+Minute+':'+Sekunde;
              return msg;
              

              Falls jemand ne einfachere oder bessere Lösung weiß, bin ich für jeden Vorschlag zu haben.

              R 1 Reply Last reply Reply Quote 0
              • R
                rewenode @frankyboy73 last edited by

                @frankyboy73 Sollte mit einem entsprechenden Formatstring zwar einfacher gehen, aber so bist du natürlich voll flexibel und kannst di Ausgabe so machen wie du es brauchst.

                F 1 Reply Last reply Reply Quote 0
                • F
                  frankyboy73 @rewenode last edited by frankyboy73

                  @rewenode Stimmt, nach dem ich mich jetzt etwas eingelesen habe und mich noch etwas mit deinem Beispiel beschäftigt habe, habe ich es auch kapiert. Je nach dem was ich bei "return" als Konvertierung eingebe (toLocalDateString oder toUTCString, usw) bekomme unterschiedliche Ausgaben des Datums. Meine bevorzugte Variante wäre glaube ich UTCString. Dann muss ich nur noch bei Date auf die richtige msg verweisen und ich habe das was ich wollte.
                  Vielen Dank für den Schubser in die richtige Richtung, dadurch habe ich wieder ne Menge dazu gelernt. Mehr als hättest du mir die komplette Lösung für meinen Bedarf auf dem Silbertabett serviert.
                  Timestamp4.jpg

                  // diese funktion wandelt msg.payload.ts in Wochentag Tag Monat Jahr Stunde Minute Sekunde um
                  // +3600000 weil sonst eine Stunde zu wenig angezeigt wird
                  
                  global.set("mydTime", function () {
                      return ((new Date(msg.payload.ts + 3600000)).toUTCString())
                  })
                  
                  msg.payload.ts = global.get("mydTime")();
                  return msg;
                  
                  

                  Edit: Bei UTC oder auch bei GMT wurde mir leider 1 Stunde zu wenig angezeigt. Weiß jemand woran das liegt?
                  Ich habe mir jetzt erst mal damit beholfen das ich zu meiner msg.payload.ts 3600000 (1 Stunde) dazu addiere. Mal schauen ob das auch beim 0 Uhr (Tageswechsel) so hin haut.

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    rewenode @frankyboy73 last edited by

                    @frankyboy73 Kann zwar nicht mit Sicherheit sagen, ob das das Problem löst, weil ich damit nicht getestet habe, aber du solltest vlt. hier mal reinschauen:

                    time-zone offset

                    So fixes ändern +/- 1 Stunde fällt einem i.d.R. irgendwann auf die Füße;-)

                    F 1 Reply Last reply Reply Quote 1
                    • F
                      frankyboy73 @rewenode last edited by

                      @rewenode Hi, danke, mit dem getTimezoneOffset klappts jetzt, ohne das ich es fix umrechnen muss.

                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @frankyboy73 last edited by mickym

                        @frankyboy73 Ich nutze die Javascript Moment Bibliothek - da bist am flexibelsten.

                        Hier mal die Nodes: https://flows.nodered.org/node/node-red-contrib-moment

                        dann hast Du zur formatierung der Datum/Zeit folgende Möglichkeiten:

                        https://momentjs.com/docs/#/displaying/format/

                        Musst halt über den Adapter oder falls Du Palettenmanager nutzt über diesen installieren.

                        R 1 Reply Last reply Reply Quote 0
                        • R
                          rewenode @mickym last edited by

                          @mickym said in Timestamp Umwandeln in Node Red (gelöst):

                          Musst halt über den Adapter oder falls Du Palettenmanager nutzt über diesen installieren.

                          Nicht unbedingt nötig. Moment.js ist in allen JSONata-nodes (change, incjekt usw.) seit NR 1.1.0 enthalten.

                          Siehe hier: moment.js in NR

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @rewenode last edited by mickym

                            @rewenode said in Timestamp Umwandeln in Node Red (gelöst):

                            @mickym said in Timestamp Umwandeln in Node Red (gelöst):

                            Musst halt über den Adapter oder falls Du Palettenmanager nutzt über diesen installieren.

                            Nicht unbedingt nötig. Moment.js ist in allen JSONata-nodes (change, incjekt usw.) seit NR 1.1.0 enthalten.

                            Siehe hier: moment.js in NR

                            Klasse !!! Das wusste ich auch noch nicht. Allerdings hat es mich nun ca. 2 Stunden gekostet - bis ich die Syntax rausbekommen habe, dass ich das gleiche wie mit der Node bekommen habe - aber letztlich habe ich es rausbekommen.

                            Wichtig scheint hier auch die Reihenfolge zu sein.

                            Ich hab das mal hier in dem Flow gegenübergestellt:
                            Hier mal mit der Moment Node:

                            screen.png

                            Hier mit der ChangeNode und JSONata:

                            screen.png

                            Um also auch die deutschen Namen zu übernehmen muss das locale vorne dran gestellt werden, das ist leider in der Beschreibung nicht drin gewesen. 😉
                            Also wie folgt:

                            $moment(payload).locale("de").format('dddd, [der] D. MMMM YYYY [um] HH:mm')
                            

                            Statt hh wie in dem Screenshot kk oder HH für 24h Anzeige nehmen.

                            HIer wieder der gesamte Workflow zum Nachvollziehen:

                            [
                                {
                                    "id": "df944da5.6a23e",
                                    "type": "inject",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "",
                                    "props": [
                                        {
                                            "p": "payload"
                                        },
                                        {
                                            "p": "topic",
                                            "vt": "str"
                                        }
                                    ],
                                    "repeat": "",
                                    "crontab": "",
                                    "once": false,
                                    "onceDelay": 0.1,
                                    "topic": "",
                                    "payload": "",
                                    "payloadType": "date",
                                    "x": 940,
                                    "y": 140,
                                    "wires": [
                                        [
                                            "ccf0fb59.dd6798",
                                            "39d58864.e30568",
                                            "8b85c7e7.4986b8"
                                        ]
                                    ]
                                },
                                {
                                    "id": "bfb1aa88.fe50c8",
                                    "type": "debug",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "",
                                    "active": true,
                                    "tosidebar": true,
                                    "console": false,
                                    "tostatus": false,
                                    "complete": "false",
                                    "statusVal": "",
                                    "statusType": "auto",
                                    "x": 1390,
                                    "y": 140,
                                    "wires": []
                                },
                                {
                                    "id": "ccf0fb59.dd6798",
                                    "type": "moment",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "",
                                    "topic": "",
                                    "input": "",
                                    "inputType": "msg",
                                    "inTz": "Europe/Berlin",
                                    "adjAmount": 0,
                                    "adjType": "days",
                                    "adjDir": "add",
                                    "format": "dddd, [der] D. MMMM YYYY [um] hh:mm",
                                    "locale": "de-DE",
                                    "output": "",
                                    "outputType": "msg",
                                    "outTz": "Europe/Berlin",
                                    "x": 1170,
                                    "y": 140,
                                    "wires": [
                                        [
                                            "bfb1aa88.fe50c8"
                                        ]
                                    ]
                                },
                                {
                                    "id": "9e57419a.12eb2",
                                    "type": "debug",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "Change Node",
                                    "active": true,
                                    "tosidebar": true,
                                    "console": false,
                                    "tostatus": false,
                                    "complete": "payload",
                                    "targetType": "msg",
                                    "statusVal": "",
                                    "statusType": "auto",
                                    "x": 1400,
                                    "y": 180,
                                    "wires": []
                                },
                                {
                                    "id": "39d58864.e30568",
                                    "type": "change",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "payload",
                                            "pt": "msg",
                                            "to": "$moment(payload).locale(\"de\").format('dddd, [der] D. MMMM YYYY [um] hh:mm')",
                                            "tot": "jsonata"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 1170,
                                    "y": 180,
                                    "wires": [
                                        [
                                            "9e57419a.12eb2"
                                        ]
                                    ]
                                },
                                {
                                    "id": "8b85c7e7.4986b8",
                                    "type": "debug",
                                    "z": "dce8fa20.2e93c8",
                                    "name": "unix TimeStamp",
                                    "active": true,
                                    "tosidebar": true,
                                    "console": false,
                                    "tostatus": false,
                                    "complete": "payload",
                                    "targetType": "msg",
                                    "statusVal": "",
                                    "statusType": "auto",
                                    "x": 1160,
                                    "y": 100,
                                    "wires": []
                                }
                            ]
                            

                            Nochmal ganz herzlichen Dank an Dich @rewenode . Man lernt nicht aus. 😉

                            Die Zeitzonen habe ich auch gerade getestet das funktioniert auch - allerdings ist es auch wieder wichtig, dass die vor dem Format String steht:

                            $moment(payload).locale("de").tz('Europe/Berlin').format('dddd, [der] D. MMMM YYYY [um] HH:mm')
                            

                            Hier habe ich im Übrigen noch ein Auflistung für mögliche Zeitzonen gefunden.

                            F R 2 Replies Last reply Reply Quote 0
                            • F
                              frankyboy73 @mickym last edited by

                              @mickym @rewenode
                              Vielen Dank ihr beiden, dank euch konnte ich es jetzt genau so umsetzen wie ich wollte.
                              Timestamp4.jpg

                              F 1 Reply Last reply Reply Quote 0
                              • F
                                frankyboy73 @frankyboy73 last edited by

                                So sieht die Meldung jetzt in Telegram aus . 😁
                                84157D0E-F564-4BC7-A019-301D73724291.jpeg

                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @frankyboy73 last edited by mickym

                                  @frankyboy73 said in Timestamp Umwandeln in Node Red (gelöst):

                                  Na schaut doch gut aus - hast Du Change Node - mit JSONata verwendet?

                                  F 1 Reply Last reply Reply Quote 0
                                  • F
                                    frankyboy73 @mickym last edited by frankyboy73

                                    @mickym
                                    Ja, ich habe die change Node verwendet.
                                    Timestamp5.jpg
                                    Hier der Eintrag.

                                    $moment(payload.ts).locale("de").format('dddd, D.MM.YYYY [,] kk[ Uhr ]mm')
                                    
                                    1 Reply Last reply Reply Quote 1
                                    • R
                                      rewenode @mickym last edited by

                                      @mickym said in Timestamp Umwandeln in Node Red (gelöst):

                                      Allerdings hat es mich nun ca. 2 Stunden gekostet - bis ich die Syntax rausbekommen habe, dass ich das gleiche wie mit der Node bekommen habe - aber letztlich habe ich es rausbekommen.

                                      Ja, ist leider nicht gerade einfach dokumentiert.
                                      Hätte vlt. noch diesen Link angeben sollen https://momentjs.com/docs/
                                      Da braucht's aber auch viel Zeit da durchzusteigen;-) Na wenigstens hast du jetzt die wichtigsten Infos zusammengetragen. Danke dafür!

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      1.1k
                                      Online

                                      31.7k
                                      Users

                                      79.7k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      17998
                                      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