NEWS
[Gelöst] Astro-Zeiten unterschiedlich
-
@mickym
Im Skript steht:var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); var tomorrowNight = getAstroDate("night", tomorrow);
Aber bei ist der Wert von today.getDate() heute aber 19. Was sollte das für ein Datum sein, ist mit dieser Funktion was falsch?
-
@diwoma Keine Ahnung - aber für mich sieht das eher so aus, dass der Skriptverfasser diesen 2. Parameter falsch verstanden hat. Da muss doch eine Zahl hin und kein Date Objekt.
Na nach dieser Doku - wäre es kein Offset sondern tatsächlich ein stateObject (Zeile 69):
https://www.kreyenborg.koeln/iobroker-astro-tageszeit-abfragen-und-in-datenpunkt-eintragen/
-
@homoran said in Astro-Zeiten unterschiedlich:
@diwoma sagte in Astro-Zeiten unterschiedlich:
in der Konfiguration wird next sunrise ausgegeben
welche?
Ich denke, bei dem der Trigger auf sunrise hört
-
@diwoma sagte in Astro-Zeiten unterschiedlich:
@homoran said in Astro-Zeiten unterschiedlich:
@diwoma sagte in Astro-Zeiten unterschiedlich:
in der Konfiguration wird next sunrise ausgegeben
welche?
Ich denke, bei dem der Trigger auf sunrise hört
????
Welche Konfiguration meinst du? -
@mickym
Du meinst also das ist nur ein Offset in Minuten und wenn ich Offset=0 eingebe, sollte das gleiche Ergebnis rauskommen. Tut es aber nicht. Der Wert muss was anders bedeuten -
@homoran said in Astro-Zeiten unterschiedlich:
????
Welche Konfiguration meinst du?Im Javascript-Adapter auf dem Astro-Tab
-
@diwoma sagte in Astro-Zeiten unterschiedlich:
@mickym
Du meinst also das ist nur ein Offset in Minuten und wenn ich Offset=0 eingebe, sollte das gleiche Ergebnis rauskommen. Tut es aber nicht. Der Wert muss was anders bedeutenJa Du hast Recht - habe gerade mal die offizielle Doku gelesen :
Also ist der 2. Parameter nicht der Offset - ist aber auch kein String oder eine Zahl sondern ein Date Objekt.
Sprich wenn Du einen Date-String hast musst erst ein Date Objekt generieren.
Und die 19 kommen raus, weil heute der 19. ist:
Das ist damit klar - mit dem Skript sollte wirklich die Nacht von morgen rauskommen. In einem Date-Objekt ohne Parameter wird ja immer das aktuelle Datum genommen
var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); var tomorrowNight = getAstroDate("night", tomorrow);
Also wird das Date Objekt mit set Date und einem Integer das Datumsobjekt auf den Tag des aktuellen Monats gesetzt:
Wenn ich mir hier die Beispiele ansehen:
dann ist
tomorrow = today.setDate(today.getDate()+1); gleich tomorrow = today.setDate(20); Somit hast Du in tomorrow das date Object von morgen.
und dann müsste es eigentlich passen, dass Du mit der astro Funktion den Sonnenaufgang von morgen bekommst.
-
@diwoma sagte in Astro-Zeiten unterschiedlich:
Und was mir auch noch etwas komisch vorkommt, die Funktion getAstroDate('sunrise', today) erwartet einen numerischen Wert als Parameter, das ist in diesem Fall der Tag (heute eben 19). Warum nicht das Datum?
Somit ist diese Aussage in Deinem Eingangspost verkehrt.
Es wird nicht ein numerischer Wert, sondern ein Datumsobjekt erwartet. Nur mit der Methode dateObj.setDate(Integer) - kannst Du das Date- Objekt auf einen anderes Datum setzen, dass Du dann der Astro Funktion übergibst.
-
@mickym
Ach du Sch...eDa muss was in der Definition der Funktion falsch sein. Wenn ich ein Datum übergebe ist der Parameter rot unterwellt, weil er der Intellisense nach ein numeric haben will. Aber es ist doch ein Datum und damit geht es.
War zwar etwas langsamer als Du, weil ich inzwischen herumprobiert habe, aber so ist mein Code:
var timestamp; var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); log('date :' + today.toString()); log('tomorrow:' + tomorrow.toString()); timestamp = getAstroDate('sunrise'); setState(idSunriseToday, timestamp.toLocaleTimeString()); timestamp = getAstroDate('sunset'); setState(idSunsetToday, timestamp.toLocaleTimeString()); timestamp = getAstroDate('sunrise', tomorrow); setState(idSunriseTomorrow, timestamp.toLocaleTimeString()); timestamp = getAstroDate('sunset', tomorrow); setState(idSunsetTomorrow, timestamp.toLocaleTimeString());
Vielen Dank für die Hilfe.
-
@diwoma Na mit gemeinsamer Recherche haben wir es hinbekommen. - So was freut mich immer am meisten.
-
@mickym, @diwoma zur Ergänzung:
getAstroDate() akzeptiert als 2ten Parameter entweder ein Datum oder einen timestamp, also die millisekunden seit 1.1.1970. Das Datum wird unterkringelt weil es in der Funktionsdefinition nicht angegeben ist. Just gestern habe ich einen PR erstellt welcher u.a. diesen 'Fehler' behebt, welcher aber eher kosmetisch ist. Fehlt der 2te Parameter, so nimmt getAstroDate() den laufenden Tag. Die o.g. Astro Settings in der Instanz wirken sich nicht auf die Berechnung aus, die Koordinaten aber natürlich schon.Es empfiehlt sich im Datum die Mittagszeit mit anzugeben sonst erhält man u.U. die Daten des Vortages.
let tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setHours(12, 0, 0, 0); log(tomorrow) let sunrise = getAstroDate('sunrise', tomorrow) log(sunrise)