NEWS
Rechnen mit Timestamps und Datenpunkten
-
Hallo, ich möchte einen Timestamp in einen Datenpunkt schreiben und später die Differenz zum aktuellen Datum ermitteln.
Eigentlich sollte das kein Problem sein, aber irgendwie habe ich ein Problem.Anlegen Datenpunkt:
createState(folderNameScripte + '.' + Room + ".Lastvalue_changed","15",{name: "Lastvalue_changed", type: 'string', role: 'date'}, function () {});
Schreiben des aktuellen Datums in den Timestamp
setState(folderNameScripte + '.' + Room + ".Lastvalue_changed", new Date(), true);
... dabei bekomme ich aber eine Fehlermeldung:
You are assigning a object to the state "0_userdata.0.scripte.Wohnzimmer_1.Lastvalue_changed" which expects a string. Please fix your code to use a string or change the state type to object. This warning might become an error in future versions.
An der Stelle habe ich jetzt ein Problem. Ich habe nicht gefunden das ich einen Datenpunkt als "Datum Element" anlegen könnte. Damit bleibt nur die Ablage als String.
Deswegen habe ich den setstate geändert:
setState(folderNameScripte + '.' + Room + ".Lastvalue_changed", new Date().toLocaleTimeString(), true);
Soweit funktioniert das ganze jetzt ohne Fehlermeldung.
Allerdings liefert mir ein
new Date() - getState(folderNameScripte + '.' + room + ".Lastvalue_changed").val
NaN als Ergebnis anstatt einer Zeitdifferenz.
Was kann ich tun?
-
@warhammer73 sagte: NaN als Ergebnis anstatt einer Zeitdifferenz.
Date.now() - new Date(getState(folderNameScripte + '.' + room + ".Lastvalue_changed").val).getTime(); // Differenz in ms
Anmerkung: new Date() liefert ein Objekt, getState(id).val einen String. Mit beidem kann man nicht rechnen.
-
@paul53 said in Rechnen mit Timestamps und Datenpunkten:
Date.now() - new Date(getState(folderNameScripte + '.' + room + ".Lastvalue_changed").val).getTime();
Das ändert am NaN als Ergebnis aber leider nichts.
Schonnew Date(getState(folderNameScripte + '.' + room + ".Lastvalue_changed").val).getTime();
liefert NaN
Vielleicht auch nicht verwunderlich, denn ein:
getState(folderNameScripte + '.' + room + ".Lastvalue_changed").val
liefert nur die Uhrzeit (10:12:10) als Ergebnis. Problem scheint also das setState erstmal zu sein.
-
@warhammer73 sagte: liefert nur die Uhrzeit
Dann nimm bei setState()
new Date().toString()
oder
formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss')