NEWS
Frage zu : Muster "isDateinRange"
-
Hallo,
auf der Seite "iobroker" gibt es ja Muster-Scripte.
u.a. auch das Script -> Ist Datum im Bereich
Also folgendes Script:
! function currentDate2() {
! var d = new Date();
! return new Date(d.getFullYear(), d.getMonth(), d.getDate());
! }
! function addDate(strDate) {
! var date = strDate.split('.');
! var d = currentDate2();
! d.setDate(date[0]);
! d.setMonth(date[1]-1);
! d.setFullYear(date[2]);
! return d;
! }
! function isDateInRange(strLower, strUpper) {
! var now = new Date();
! var lower = addDate(strLower);
! var upper = addDate(strUpper);
! var inRange = false;
! if (upper > lower) inRange = (now >= lower && now <= upper) ? true : false;
! else log('isDateInRange meldet Fehler! "von"-Datum ist nicht früher als "bis"-Datum', 'error');
! log("upper=" + upper + " lower="+lower + " now=" + now);
! return inRange;
! }Dieses Script habe ich als globales Script gespeichert.
Heute ist der 29.12.016. Wenn ich nun aus einem anderen Script probiere, z.B.
var Zeit_pruef = isDateInRange('29.12.2016', '30.12.2016');
dann bekomme ich true zurück. Soweit sogut.
Schreib ich aber:
var Zeit_pruef = isDateInRange('28.12.2016', '29.12.2016');
dann kommt false zurück.
Warum ???
Der upper Wert ist doch gleich dem now Wert; warum klappt dies nicht ?
Und wenn ich gar:
var Zeit_pruef = isDateInRange('29.12.2016', '29.12.2016');
dann kommt sogar die Fehlermeldung: 'isDateInRange meldet Fehler! "von"-Datum ist nicht früher als "bis"-Datum' im log.
Damit könnte man doch sehr schön überprüfen ob der Tag genau passt.
Fazit:
Irgendwo ist da noch ein Fehler drin!
Find ihn nur nicht?
Kann mir jemand da mal helfen.
mfg
Dieter
-
Warum soll da ein Fehler drin sein?
Das aktuelle Datum muss kleiner dem höheren sein ( nicht kleiner gleich!). Das analoge gilt für den unteren Wert.
Es ist wie beim Fußball
Die Grenzdaten sind wie torpfosten, der Ball muss dazwischen durch, nicht dagegen, sonst ist es kein Tor.
Gruß
Rainer
-
das Script lese ich aber anders, dort steht:
now >= lower && now <= upper
Das heißt doch, dass "now" auch = lower sein kann.
oder ?
-
Die Grenzdaten sind wie torpfosten, der Ball muss dazwischen durch, nicht dagegen, sonst ist es kein Tor. `
Wenn deine These stimmt, dann müsste mein 1. Beispiel nicht funktionieren.
Denn da liegt now = lower.
mfg
-
Ich vermute mal das Problem liegt an den Variablen "lower" und "upper".
Ich hab diese mal geloggt.
Ergebnis:
filename="bild1.jpg" index="0">~~Hier sieht man, dass nicht nur das Datum, sondern auch die Uhrzeit gespeichert ist.
Und das führt m.E. zu falschem Ergebnis.
mfg
-
Hallo Homoran,
konntest du das Script mal testen ?
mfg
-
konntest du das Script mal testen ? `
Nein, außerdem wäre ich als Script Legastheniker dafür der falsche.
Gruß
Rainer
-
ok,
kann jemand anders das script mal überprüfen.
mfg
Dieter
-
Versuche es mal mit folgendem Script:
function isDateInRange(lower, upper) { var now = Date.now(); lower = lower.split('.'); upper = upper.split('.'); lower = new Date(lower[2], lower[1] - 1, lower[0]).getTime(); upper = new Date(upper[2], upper[1] - 1, upper[0], 23, 59, 59, 999).getTime(); var inRange = false; if (upper > lower) inRange = (now >= lower && now <= upper) ? true : false; else log('isDateInRange meldet Fehler! "von"-Datum ist später als "bis"-Datum', 'warn'); return inRange; }
-
paul53 !
das wars.
Spitze.
Klappt wunderbar.
Man sollte dein Script mit dem Muster auf "iobroker" austauschen.
-> wenn ein admin mit liest ! <-
mfg
Dieter
-
Ich lese!
Auch wenn ich nur Mod bin
Mal sehen, wann ich wieder an einen PC kann
Guten Rutsch
Rainer
-
Hallo Hamoran,
das Time ! in Range auch austauschen.
mfg
Dieter
-
Melde mich auch mal dazu:
ich habe das neue Skript noch nicht getestet. Das alte Skript habe ich auf der Basis http://forum.iobroker.net/viewtopic.php?f=21&t=1072&p=11167&hilit=istimeinrange&sid=5d5834ef7192dc471724e2fb9e5b80e5#p8484 auf isDateinRange umgebastelt
http://forum.iobroker.net/viewtopic.php … 20&p=25886
Bisher hatte ich keine Fehler, aber ich werde es mir ansehen, wenn ich Zeit finde. Danke für die Meldung!
Gruß
Pix