NEWS
Anzahl der Tage nach Datum
-
@srkonus sagte in Anzahl der Tage nach Datum:
@mkshb said in Anzahl der Tage nach Datum:
Moin @theduke,
konvertiere beide Daten in Millisekunden, rechne die Differenz aus und teile durch 86400000.
(26.04.2022 = 16509710270000) - (27.08.2021 = 1630015200000) = 20908800000
20908800000 / 86400000 = 242 TageBlockly:
Wie setze bzw. rechne ich ein bestimmtes Datum in Millisekunden um?
Ansonsten wenn Du lieber selber rechnen willst über die Methode von @mkshb - habe ich Dir im Blockly noch die andere Möglichkeiten angehängt (aktuelles Datum in ms und bestimmtes Datum in ms):
Du siehst auch hier kommt beim Datum vom 27.8.2021 leicht auf die Millisekunden:
1630015200000 und damit auch auf 319 Tage, wie die duration Bibliothek ausgibt. Wenn Du also lieber selbst rechnen willst, kannst Du es auch ohne die Bibliothek easy tun. -
@mickym Mega - Vielen Dank! Jetzt muss ich das nur noch irgendwie in eine Variable bekommen und kann damit weiter rechnen.
-
@srkonus Na das sollte doch wirklich kein Problem sein, Du musst doch den Block - statt dem debug output nur einer Variablen zuweisen:
-
@mickym Habe es mit "Schreibe Objekt ID" gemacht. Morgen einmal nachschauen, ob das "Tage Seit" sich automatisch aktualisiert oder ich einen CRON Job einrichten muss.
-
Startest du das Script automatisch neu, wenn nicht, wird sich nach dem ersten Durchlauf nichts mehr ändern.
Entweder Triggern oder ein CRON halt.
Gruß Tom
-
Mit Interesse habe ich diesen Thread gelesen und versuche ihn für meine Zwecke umzusetzen.
Irgendetwas mache ich falsch, die Berechnung von @srkonus (danke für den npm - link) stimmt, meine eigene aber nicht.
Funktion Zeitraum_Tage_1 --> Ergebnis 96 (richtig)
var Duration = require("duration"); var duration = new Duration(new Date(seit)); return duration.days;
Funktion Zeitraum_Tage_2 --> Ergebnis 66 (falsch)
var Duration = require("duration"); var duration = new Duration(new Date(2022, 04, 12)); return duration.days;
Warum bitte?
-
Ich würde sagen die Schreibweise des Datums ist falsch. dd/mm/yyyy
-
@tt-tom ich habe mich nach der Beschreibung auf der npm Seite gehalten:
oder wie meinst du das? -
@metaxa sagte in Anzahl der Tage nach Datum:
Funktion Zeitraum_Tage_1 --> Ergebnis 96 (richtig)
Ich habe rasch mit Excel nachgerechnet, da kommen aktuell 94 Tage raus. Komisch ........
=DATEDIF($C$5;$F$6;"d")
-
@metaxa
Bin von Date ausgegangen. Muss mir mal die npm Seite ansehen -
-
@metaxa bei mir kommen 96 raus. Formatierungensfehler der Zellen vielleicht.
-
@tt-tom sagte in Anzahl der Tage nach Datum:
bei mir kommen 96 raus.
Korrekt, in Excel habe ich es richtig gestellt, sorry mein Fehler. Ein Rätsel bleibt mir aber die Berechnung der duration function.
-
Ja das ist komisch. Komme aktuell nicht an mein Rechner, um selber zu testen.
-
Das Problem ist, wenn Du bei Date nicht über eine Array initialisierst sondern Date mit dem normalen Konstruktor verwendest, (s. Date Funktion), dann wird der Januar mit Index 0 gezählt.
Siehe hier: https://www.w3schools.com/js/js_dates.asp
Um also den 12.April 2022 zu bekommen musst Du beim Monat eines abziehen.
var Duration = require("duration"); var duration = new Duration(new Date(2022,3,12)); return duration.days;
Sprich in deinem 2. Beispiel berechnest Du die Tage seit dem 12. Mai 2022 anstelle des Aprils.
Intern scheint bei einer Array Übergabe, dieses als String konvertiert zu werden siehe hier und somit in einen String konvertiert zu werden.
Als String wird es dann wieder korrekt interpretiert:
var Duration = require("duration"); var duration = new Duration(new Date("2022,4,12")); return duration.days;
Wenn Du Dir das Datum als String ausgeben lässt, dann siehst Du es ja:
var Duration = require("duration"); // var duration = new Duration(new Date("2022,4,12")); // return duration.days; const d = new Date(2022,4,12); return d;
ergibt dann:
-
Sorry - für die Verwirrung -
@metaxa Somit kannst Du Deinen Datenpunkt als String direkt der duration Bibliothek übergeben, da dann das Datum aus einem String gebildet wird:
Also sorry nochmal. Aber so ist es ja auch noch einfacher und spart sich die Umrechnerei halt komplett. Man muss halt nur darauf achten, dass der String das Format YYYY/MM/DD hat. Ich lerne auch jeden Tag dazu.
-
@mickym sagte in Anzahl der Tage nach Datum:
Man muss halt nur darauf achten, dass der String das Format YYYY/MM/DD hat.
@metaxa
das meine ich vor hin. Kann mir nur die Reihenfolge nicht merken. -
-
@mickym
Ah, okay. Das Problem tritt aber nur auf, wenn man kein Enddatum angibt. Gruß Tom -
Ah, okay. Das Problem tritt aber nur auf, wenn man kein Enddatum angibt. Gruß Tom
Nein hat damit nichts zu tun - wie gesagt, dass Problem ist immer, dass Date Objekt in JS mit Index 0 rechnen.
Wie gesagt ich hab unten ja zur Javascript Referenz verlinkt. https://www.w3schools.com/js/js_dates.aspDas hat mit dem Enddatum nichts zu tun, da musst du genauso eins abziehen.
Folglich gibt dies hier:
var Duration = require("duration"); var duration = new Duration(new Date(2022,6,1),new Date(2022,7,1)); return duration.days;
31 Tage und nicht 30, weil es sich hier nicht um den JUNI, sondern um den JULI handelt.
Dies hingegen berechnet korrekt den JUNI:
var Duration = require("duration"); var duration = new Duration(new Date(2022,5,1),new Date(2022,6,1)); return duration.days;
Also 30 Tage.
BEACHTE: Bei dieser Schreibweise, werden 3 Argumente als Zahlen zur Konstruktion des Date-Objektes übergeben und KEIN String (oder Array, das implizit in einen String umgewandelt wird). Insofern war das Problem von @metaxa nicht nur, dass er einen Monat zuviel genommen hat, sondern 2 unterschiedliche Formate zur Konstruktion des Date-Objektes.