Anfänger braucht Hilfe bei der Zeit Umrechnung

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
firstfacility
Beiträge: 20
Registriert: 08.11.2020, 16:01
System: CCU

Anfänger braucht Hilfe bei der Zeit Umrechnung

Beitrag von firstfacility » 17.08.2023, 15:24

Hallo Forum,
ich habe ein Problem mit der Zeit Ausgabe in meinen Flow. Ich bekomme ein:

Code: Alles auswählen

msg.payload : number
1692246143


Hieraus würde ich nun gern eine deutsches Format von Datum und Uhrzeit erzeugen. Hierzu habe ich folgendes Script:

Code: Alles auswählen

Time = (new Date()).toLocaleString(`de-De`);
msg.payload = Time ;
return msg;
Als Ausgabe bekomme ich allerdings nicht die Umrechnung sondern die aktuelle Zeit und Datum:

Code: Alles auswählen

17.8.2023, 15:19:29node: debug 2
msg.payload : string[19]
"17.8.2023, 15:19:29"
Vielleicht kann mir jemand helfen ?

Gruß
Frank

Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Anfänger braucht Hilfe bei der Zeit Umrechnung

Beitrag von Henke » 17.08.2023, 16:01

new Date() ist die aktuelle Zeit
new Date(1692246143) oder new Date(msg.payload) das was du willst.


firstfacility
Beiträge: 20
Registriert: 08.11.2020, 16:01
System: CCU

Re: Anfänger braucht Hilfe bei der Zeit Umrechnung

Beitrag von firstfacility » 17.08.2023, 19:14

Jetzt komme das dabei raus:

Code: Alles auswählen

17.8.2023, 19:11:49node: debug 4
msg.payload : string[10]
"1692246141"
17.8.2023, 19:11:49node: debug 4
msg.payload : string[19]
"20.1.1970, 15:04:06"


Benutzeravatar
Henke
Beiträge: 1536
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 144 Mal
Danksagung erhalten: 309 Mal

Re: Anfänger braucht Hilfe bei der Zeit Umrechnung

Beitrag von Henke » 17.08.2023, 22:51

Ok, etwas ausführlicher?

Fangen wir damit an:

Code: Alles auswählen

toLocaleString(`de-De`);
ist nicht so optimal, da diese "`" in Javascript eine beesondere Funktion haben. Das dürfte hier nichts ausmachen, aber durch Copy/Past kommt irgendwann der Fehler.

Besser also und "de" reicht:

Code: Alles auswählen

msg.payload = new Date(msg.payload * 1000).toLocaleString('de');
return msg;
Irgendwann kommt der Wunsch an andere Formate dran zu kommen.
Dazu meine ersten Experimente wie ich an die richtigen Felder dran komme:

Code: Alles auswählen

let sysDate = new Date();

let newMsg = msg;
newMsg.payload = sysDate.toLocaleString("de");
newMsg.Stunde = sysDate.getHours();
newMsg.Tag = sysDate.getDate();
newMsg.Monat = sysDate.getMonth();
newMsg.Jahr = sysDate.getFullYear();
newMsg.TagImJahr = TagImJahr(sysDate);

newMsg.mm = shortDate (sysDate);

node.send(newMsg);

function TagImJahr(date) {
    return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(date.getFullYear(), 0, 0)) / 24 / 60 / 60 / 1000;
}

function shortDate(date) {
    return (date.toLocaleDateString("de", { month: "short" }) + " " + date.getDate() + " " + date.toLocaleTimeString("de") );
    return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(date.getFullYear(), 0, 0)) / 24 / 60 / 60 / 1000;
}
Elegant sieht es aber anders aus. Da in NodeRed JSONNATA mit der moment Lib integriert ist, lädt man diese durch einen Eintrag in der function node nach.
Screenshot 2023-08-17 221347.jpg
und ist dann ziemlich flexibel:

Code: Alles auswählen

msg.payload = 1692246141;
msg.payload = moment.unix(msg.payload ).locale('de').format('DD.MM.YYYY [Uhrzeit]: HH:MM [und Baxxy sagt es ist] dddd');
msg.heute = moment().locale('de').format('LLLL');
msg.vor7Stunden = moment().subtract(7, 'h').locale('de').format('LLL');

return msg;
Liefert:

Code: Alles auswählen

{
"payload":"17.08.2023 Uhrzeit: 06:08 und Baxxy sagt es ist Donnerstag",
"heute":"Donnerstag, 17. August 2023 22:38",
"vor7Stunden":"17. August 2023 15:41"}
Gerne können wir noch den Speicherverbrauch oder das Laufzeitverhalten diskutieren, aber die Kurzform ist: nicht relevant
Schwieriger war es, diese Lösung mit lokalem Ansatz zu finden, da sich viele, wie ich am Anfang verzetteln und google kein adäquates Ergebnis brachte.
Chat Gpt habe ich nicht getestet...
Vielleicht liefert das sofort die richtige Lösung. :lol:

Antworten

Zurück zu „RedMatic“