Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Beispiel: aktuelles Datum formatieren und ausgeben

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Beispiel: aktuelles Datum formatieren und ausgeben

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 6 Kommentatoren 24.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von
    #1

    Anbei ein Beispiel für eine node-red function, die das aktuelle Datum in ein beliebiges Format umwandelt.

    327_2015-05-01_tst_umwandeln.jpg

    Code in der Funktion:

    ! ````
    // (1) wandelt timestamo ins ISO Datumformat um
    //msg.timestamp= new Date().toISOString()
    ! // (2) beliebiges Datum festlegbar: hier: YYYY-MM-DD HH:MM.SS
    // (Ausgabeformat wird danz am Ende zusammengestellt)
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth()+1;
    var day = now.getDate();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    if(month.toString().length == 1) {
    var month = '0'+month;
    }
    if(day.toString().length == 1) {
    var day = '0'+day;
    }
    if(hour.toString().length == 1) {
    var hour = '0'+hour;
    }
    if(minute.toString().length == 1) {
    var minute = '0'+minute;
    }
    if(second.toString().length == 1) {
    var second = '0'+second;
    }
    ! // Variante1: wenn z.B. nicht ein vorhandener Payload
    // überschrieben werden soll, sondern um ein
    // Datum ergänzt werden soll.
    ! //msg.timestamp = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
    ! // Variante 2: Function gibt die aktuelle Zeit als payload aus
    msg.payload = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
    ! return msg;

    
    Node-red Flow:
    
    >! ````
    [{"id":"63c5d5c5.9c3a2c","type":"function","name":"now aktuelles Datum","func":"// (1) wandelt timestamo ins ISO Datumformat um\n//msg.timestamp= new Date().toISOString()\n\n\n// (2) beliebiges Datum festlegbar: hier: YYYY-MM-DD HH:MM.SS\n//     (Ausgabeformat wird danz am Ende zusammengestellt)\nvar now     = new Date(); \nvar year    = now.getFullYear();\nvar month   = now.getMonth()+1; \nvar day     = now.getDate();\nvar hour    = now.getHours();\nvar minute  = now.getMinutes();\nvar second  = now.getSeconds(); \nif(month.toString().length == 1) {\nvar month = '0'+month;\n}\nif(day.toString().length == 1) {\nvar day = '0'+day;\n}   \nif(hour.toString().length == 1) {\nvar hour = '0'+hour;\n}\nif(minute.toString().length == 1) {\nvar minute = '0'+minute;\n}\nif(second.toString().length == 1) {\nvar second = '0'+second;\n} \n  \n//msg.timestamp = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;\nmsg.payload = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;\n\n\nreturn msg;","outputs":1,"x":996.2500152587891,"y":485.00000762939453,"z":"9d9dc866.626238","wires":[["d5e189e4.2a1e78","40557647.bfaa88"]]},{"id":"d5e189e4.2a1e78","type":"ioBroker out","name":"","topic":"TestDatum2","ack":"true","autoCreate":"true","x":1214.166660308838,"y":484.58338928222656,"z":"9d9dc866.626238","wires":[]},{"id":"8820471a.77dfb8","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":801.2500228881836,"y":484.16673278808594,"z":"9d9dc866.626238","wires":[["63c5d5c5.9c3a2c"]]},{"id":"40557647.bfaa88","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1216.250015258789,"y":440.00000762939453,"z":"9d9dc866.626238","wires":[]}]
    

    In dem Beispiel wird nicht das Datum der Nachricht umgewandelt, sondern vom der aktuellen Zeit (Date()).

    Test und Beispiel zum Verständnis:
    327_2015-05-01_tst_umwandeln_2.jpg

    Node-red Flow:

    ! ````
    [{"id":"76a3a5f9.895c5c","type":"function","name":"now aktuelles Datum","func":"// (1) wandelt timestamo ins ISO Datumformat um\n//msg.timestamp= new Date().toISOString()\n\n\n// (2) beliebiges Datum festlegbar: hier: YYYY-MM-DD HH:MM.SS\n// (Ausgabeformat wird danz am Ende zusammengestellt)\nvar now = new Date(); \nvar year = now.getFullYear();\nvar month = now.getMonth()+1; \nvar day = now.getDate();\nvar hour = now.getHours();\nvar minute = now.getMinutes();\nvar second = now.getSeconds(); \nif(month.toString().length == 1) {\nvar month = '0'+month;\n}\nif(day.toString().length == 1) {\nvar day = '0'+day;\n} \nif(hour.toString().length == 1) {\nvar hour = '0'+hour;\n}\nif(minute.toString().length == 1) {\nvar minute = '0'+minute;\n}\nif(second.toString().length == 1) {\nvar second = '0'+second;\n} \n\n\n// Variante1: wenn z.B. nicht ein vorhandener Payload\n// überschrieben werden soll, sondern um ein\n// Datum ergänzt werden soll. \n\n//msg.timestamp = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;\n\n// Variante 2: Function gobt die aktuelle Zeit als payload aus\nmsg.payload = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;\n\nreturn msg;","outputs":1,"x":1112.500015258789,"y":136.66663551330566,"z":"9d9dc866.626238","wires":[["9686a94e.697958","7237ae9e.8dc85","c557ecb1.3aa81"]]},{"id":"9686a94e.697958","type":"ioBroker out","name":"","topic":"TestDatum","ack":"true","autoCreate":"true","x":1311.6666450500488,"y":135.00000190734863,"z":"9d9dc866.626238","wires":[]},{"id":"7237ae9e.8dc85","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1315.833396911621,"y":98.33335304260254,"z":"9d9dc866.626238","wires":[]},{"id":"470bde4f.b8f42","type":"inject","name":"","topic":"Beispiel Datumsformat","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":638.7500076293945,"y":138.33336067199707,"z":"9d9dc866.626238","wires":[["2a14ac81.d5eb54","c9fa1333.3605f"]]},{"id":"2a14ac81.d5eb54","type":"debug","name":"","active":true,"console":"false","complete":"false","x":838.7500114440918,"y":91.2500057220459,"z":"9d9dc866.626238","wires":[]},{"id":"c557ecb1.3aa81","type":"template","name":"Beispiel Object","field":"payload","template":"Topic: {{topic}} -\nTimestamp aus dem inject Node: \n{{tst}} -\nUmwandlung aus der function "now...":\n{{payload}}","x":1103.750015258789,"y":228.75000381469727,"z":"9d9dc866.626238","wires":[["5bb61570.a449ec"]]},{"id":"c9fa1333.3605f","type":"function","name":"Test msg.payload = msg.tst","func":"msg.tst = msg.payload;\nreturn msg;","outputs":1,"x":882.5000152587891,"y":136.25000190734863,"z":"9d9dc866.626238","wires":[["76a3a5f9.895c5c"]]},{"id":"5bb61570.a449ec","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1332.5000190734863,"y":227.50000381469727,"z":"9d9dc866.626238","wires":[]}]

    
    Der Lerneffekt für mich war dabei, wie man mehrere Informationen in einer Message (msg) (=Object?) weitergibt und einzeln verarbeitet/ergänzen/ausgeben kann.
    
    Die msg, die zuletzt am template ankommt (template verwende ich z.B. in anderen Flows, um eine Email zusammenzubauen), enthält die Informationen ****msg.topic**** (aus dem inject node), ****msg.tst**** (Ursprung als msg.payload aus dem inject node, Umwandlung in der folgenden Funktion in msg.tst) und ****msg.payload**** aus der Funktion, die das aktuelle Datum (Date()) in ein lesbares Datumsformat umwandelt.
    
    ****Statt die aktuelle Zeit in der Funktion zu erzeugen soll nun die Zeit aus der msg (im Beispiel msg.payload aus dem inject node) in ein lesbares Datum umgewandelt werden:****
    
     ![327_2015-05-01_tst_umwandeln_3.jpg](/assets/uploads/files/327_2015-05-01_tst_umwandeln_3.jpg) 
    
    Hierzu muss der Code in der Funktion um eine Zeile ergänzt werden.
    
    Nachdem die Variable now mit dem aktuellen Datum erzeugt wurde, wird diese neu gestellt und zwar mit dem msg.payload aus dem inject node.
    
    var now = new Date();
    
    ****now.setTime(msg.payload); // Zeit aus dem Payload****
    
    Das ganze Script aus der Funktion, um diese Zeile ergänzt:
    
    >! ````
    // (1) wandelt timestamo ins ISO Datumformat um
    //msg.timestamp= new Date().toISOString()
    >! // (2) beliebiges Datum festlegbar: hier: YYYY-MM-DD HH:MM.SS
    //     (Ausgabeformat wird danz am Ende zusammengestellt)
    >! var now     = new Date(); 
    now.setTime(msg.payload); // Zeit aus dem Payload
    var year    = now.getFullYear();
    var month   = now.getMonth()+1; 
    var day     = now.getDate();
    var hour    = now.getHours();
    var minute  = now.getMinutes();
    var second  = now.getSeconds(); 
    if(month.toString().length == 1) {
    var month = '0'+month;
    }
    if(day.toString().length == 1) {
    var day = '0'+day;
    }   
    if(hour.toString().length == 1) {
    var hour = '0'+hour;
    }
    if(minute.toString().length == 1) {
    var minute = '0'+minute;
    }
    if(second.toString().length == 1) {
    var second = '0'+second;
    } 
    
    //msg.timestamp = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
    msg.payload = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
    >! return msg;
    

    Eine Bitte. Sollte ich etwas falsch verstanden habe, bin ich um jeden Hinweis und jede Korrektur dankbar!

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    1
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      Nur zur Info. ;)

      var now     = new Date(); 
      now.setTime(msg.payload); // Zeit aus dem Payload
      

      Kann man direkt aufrufen:

      var now     = new Date(msg.payload); // Zeit aus dem Payload
      
      
      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #3

        Klasse!! Danke Dir Bluefox!

        Das sind genau die kleinen Infos, die ich brauche um weiterzukommen.

        Ist auch irgendwie logisch ;-)

        Also

        var Zeit = new Date();
        

        Erzeugt eine Variable "Zeit" mit der aktuellen Zeit.

        var Zeit = new Date(msg.payload);
        

        Erzeugt eine Variable "Zeit" anhand des Timestamp aus msg.payload (Unix Format: 1430470225849).

        Die Variable "Zeit" hat dann das Format: "2015-05-01T08:51:49.984Z" (nach ISO).

        Das Script oben im Threat zerlegt dann dieses Format in seine Einzelteile, um es dann beliebig zusammenbauen zu können.

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • A Offline
          A Offline
          abuzze
          schrieb am zuletzt editiert von
          #4

          Hallo

          Ich habe eine Frage zum Datum und speichern von Dateien.

          Wie kann ich eine Datei aus einem http request (buffer )mit einem Zeitstempel versehen ?

          /pfad/aktuelles_Datum.jpg

          Das ganze soll später für Zeitraffer sein.

          Grüsse von der Spree

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            rewenode
            schrieb am zuletzt editiert von
            #5

            Wenn man spezielle Datumsformatierungen häufig brauch, kann es sich lohnen, mit er externen moment-lib zu arbeiten.

            <url url="https://t3n.de/news/momentjs-zeitberechnungen-mint-javascript-562592/">[https://t3n.de/news/momentjs-zeitberechnungen-mint-javascript-562592/ " target="_blank">](</s><LINK_TEXT text=)[<link_text text="https://t3n.de/news/momentjs-zeitberech … t-562592/
            ">https://t3n.de/news/momentjs-zeitberechnungen-mint-javascript-562592/</link_text>](</s><LINK_TEXT text=)</url>

            Die muss erstmal installiert sein:

            $ npm install moment

            und in den settings.js im functionGlobalContext hinterlegt sein.

                functionGlobalContext: {
                    //os:require('os'),
                    //fs:require('fs'),
                    moment:require('moment')
                },
            
            

            Dann kann sie im Functionsnode einfach verwendet werden.

            [{"id":"7a90b82b.fd85","type":"comment","z":"ac1c61ca.ff0038","name":"use moment module in function nodes","info":"https://momentjs.com/docs/\n","x":276,"y":105,"wires":[]},{"id":"f29493e0.f060f","type":"inject","z":"ac1c61ca.ff0038","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":209,"y":156,"wires":[["c0891056.eb7c"]]},{"id":"c0891056.eb7c","type":"function","z":"ac1c61ca.ff0038","name":"ext. Lib moment","func":"let moment = global.get('moment');\n\nmsg.date = moment().format(\"DD.MM.YYYY hh:mm\");     //moment example\n\nreturn msg","outputs":1,"noerr":0,"x":400,"y":156,"wires":[["bd9aef67.7569d8"]]},{"id":"bd9aef67.7569d8","type":"debug","z":"ac1c61ca.ff0038","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":574,"y":156,"wires":[]}]
            
            1 Antwort Letzte Antwort
            0
            • A Offline
              A Offline
              abuzze
              schrieb am zuletzt editiert von
              #6

              Hallo

              Ich kann das erst heute Abend mal testen.

              Eins verstehe ich noch nicht. —-…....und in den settings.js im functionGlobalContext hinterlegt sein——

              Wo befindet sich denn die settings.js ? Vielleicht geht es ja auch einfacher. Es soll ja nur ein Bild gespeichert werden mit aktuellem Datum.

              Danke

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                rewenode
                schrieb am zuletzt editiert von
                #7

                > Vielleicht geht es ja auch einfacher. Es soll ja nur ein Bild gespeichert werden mit aktuellem Datum.

                Dann solltest du vlt.

                let suffix = ".jpg" //what ever
                let date = new Date();
                let file = date.getTime()+suffix;
                
                

                oder ähnlich nehmen .

                Dann sind diene Dateien auch gleich nach Datum sortiert.

                1 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  abuzze
                  schrieb am zuletzt editiert von
                  #8

                  Danke erstmal.Aber ich komme nicht weiter ,weil ich nicht weis was ich damit anfangen soll.Ich dachte das ich einfach ein functions node hinter meinem http request node habe und dann is alles gut ,aber es scheint doch etwas komplizierter zu sein.

                  Hast du vielleicht ein Beispiel wo ich mich orientieren kann ? Das wäre schön.

                  Danke

                  1 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    abuzze
                    schrieb am zuletzt editiert von
                    #9

                    Ok. Ich glaube ich habe es selber herausgefunden.

                    msg.filename = "/root/timelapse/pic"+msg.payload+".jpg";
                    return msg;
                    

                    Danke
                    1811_bildschirmfoto_2018-03-21_um_21.55.03.png

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Marty56
                      schrieb am zuletzt editiert von
                      #10

                      kann man das nicht ohne Function Node machen.

                      Die ständige Verwendung von Function Nodes kann doch nicht das Ziel sein.

                      HW:NUC (16 GB Ram)
                      OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                      1 Antwort Letzte Antwort
                      0
                      • R Offline
                        R Offline
                        rewenode
                        schrieb am zuletzt editiert von
                        #11

                        Falls du den Thread aus aktuellem Anlass ausgegraben hast,

                        @Marty56:

                        kann man das nicht ohne Function Node machen.

                        Die ständige Verwendung von Function Nodes kann doch nicht das Ziel sein. `

                        Stimmt. Leider kann der Dateiname im file-node nicht dynamisch gebildet werden. Und irgendwo muss der ja herkommen.

                        Aber du kannst natürlich einen change-node mit einem JSONata Ausdruck nehmen, das ist recht einfach:

                        3999_filename.png

                        JESONata kennt ne Reihe geeigneter date/time Funktionen:

                        http://docs.jsonata.org/date-time-functions

                        Leider ist in der iobroker-node-red Version nicht die aktuellste JSONata Version eingebunden. Das schmerzt besonders bei der function $fromMillis() die inzwischen diverse Format-Optionen kennt.

                        Man kann sich aber gut mit den JSONata Stringfunktionen behelfen:

                        http://docs.jsonata.org/string-functions

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          Marty56
                          schrieb am zuletzt editiert von
                          #12

                          Danke! Super Support, schon das zweite Mal!!

                          HW:NUC (16 GB Ram)
                          OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                          1 Antwort Letzte Antwort
                          0
                          • G Offline
                            G Offline
                            Garf
                            schrieb am zuletzt editiert von
                            #13

                            @rewenode:

                            Leider ist in der iobroker-node-red Version nicht die aktuellste JSONata Version eingebunden. Das schmerzt besonders bei der function $fromMillis() die inzwischen diverse Format-Optionen kennt. `
                            Ich verwende Node-Red direkt auf dem Raspi3, aber mit der$fromMillis habe ich auch ein Problem.

                            Das erste Beispiel funktioniert,
                            3639_sc21.jpg

                            die beiden anderen führen zu nachfolgender Fehlermeldung.
                            3639_sc22.jpg

                            1 Antwort Letzte Antwort
                            0
                            • R Offline
                              R Offline
                              rewenode
                              schrieb am zuletzt editiert von
                              #14

                              Ja, ist erst ab der JSONata 1.6.4 implementiert. Und die wird noch nicht in NR genutzt. Liegt also nicht am ioBroker.NR. Hab mal ein Issues auf Github hinterlassen https://github.com/node-red/node-red/issues/2023

                              Soll wohl ab NR 0.20 erfolgen.

                              Kannst es natürlich auf der JSONata-Seite testen:

                              http://docs.jsonata.org/date-time-functions#frommillis

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              864

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe