hab ihr eine Idee?
Datum vergleichen und unterschied Tage berechnen.
Einklappen
X
-
Datum vergleichen und unterschied Tage berechnen.
Ich würde gerne zwei Datum mit einander vergleichen und die dazwischen liegenden Tage berechnen.
hab ihr eine Idee?Stichworte: - -
-
Ich hab das eben gebaut. Mach ein Programmobjekt und schließ ihn wie folt an:
year1, month1 und day1 ist das eine Datum (jeweils numerische Werte!) und year2, month2, day2 das zweite.
In O1 ist die Differenz in Tagen. ETxt ist eine Fehlerausgabe, falls der PicoC Code nen Fehler wirft. Ich habe ihn aber getestet, wer geht korrekt.
Der Code ist wie folgt, einfach in die Code-Box kopieren:
Code:long time1 = gettimeval(getinput(0), getinput(1), getinput(2),0,0,0,0); long time2 = gettimeval(getinput(3), getinput(4), getinput(5),0,0,0,0); setoutput(0, (time2 - time1) / 86400);
gettimeval berechnet die Sekunden (seit dem 1.1.2009) eines gegebenen Datums.
Ich erzeuge die Differenz der beiden Zeitstamps, die dann in Sekunden ist. Um die Differenz in Tagen bekommen, muss man das Ergebnis durch 86400 dividieren, denn das ist die Zahl der Sekunden pro Tag.
Ich hoffe, das hilft Dir weiter!
Kommentar
-
-
@Grestorn in der Berechnung ist noch ein kleines Problem.
Die Berechnung erfolgt nur beim im Server speichern.
leider aber nicht beim Ändern des wertes I3 oder so.
ich könnte mir einen Impuls Eingang vorstellen der die Berechnung startet aber wie könnte das aussehen.
Zuletzt geändert von HIS-Loxone; 24.04.2024, 09:51.Kommentar
-
Bist Du ganz sicher? Die Rechnung ist eigentlich Foolproof. Ich weiß aber nicht, wann der Programmbaustein eine Neuberechnung triggern. Hast Du die Ausgabe mal in der Visualisierung anzeigen lassen? Ich bin mir nicht so sicher, dass die Live-View Anzeige im Config die richtigen Werte anzeigt bei Programmbausteinen (bei mir hat sie das nämlich nicht). In der Visualisierung stimmen sie dann aber immer.Kommentar
-
Kommentar
-
-
Ich habe ein ähnliches Verhalten mit dem PicoC-Code in einem Miniserver Gen1 festgestellt. Ich habe es nicht mit einem Gen2 getestet.
Beigefügt ist ein leicht modifizierter Code, der nur bei einer Wertänderung an einem von I1-I6 läuft.
Code:int prevEvent = -1; // Initialize previous event to an invalid value while (1) { int currentEvent = getinputevent(); // Check if there's a change in input event if (currentEvent != prevEvent) { // Update previous event prevEvent = currentEvent; // Get time values long time1 = gettimeval(getinput(0), getinput(1), getinput(2), 0, 0, 0, 1); long time2 = gettimeval(getinput(3), getinput(4), getinput(5), 0, 0, 0, 1); // Set output based on time difference setoutput(0, (time2 - time1) / 86400); } sleep(100); }
Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.👍 1Kommentar
-
Kommentar