Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Frage: isTimeInRange umschreiben auf Datum

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    252

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Frage: isTimeInRange umschreiben auf Datum

Scheduled Pinned Locked Moved Skripten / Logik
12 Posts 8 Posters 3.9k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Offline
    W Offline
    webseb79
    wrote on last edited by
    #1

    Guten Abend liebes Forum,

    in diesem Beitrag

    http://forum.iobroker.org/viewtopic.php?t=1072

    wird ein Script vorgestellt wo es um die Funktion zur Prüfung eines Zeitfenster geht.

    Meine Frage ist, ob es möglich ist dieses Script umzuschreiben und auf ein Datumsbereich zu prüfen?

    Danke im voraus

    Sebastian

    G 1 Reply Last reply
    0
    • P Offline
      P Offline
      pix
      wrote on last edited by
      #2

      Hallo,

      geht so:

      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');
          return inRange;
      }
      ````Wenn man isTimeInRange auch global nutzt, kann man die __function currentDate2__ löschen (Zeile 1-4) und in __addDate()__ den Funtionsaufruf __currentDate2();__ in __currentDate();__ ändern (Zeile 7).
      
      Zum Aufruf ein deutsches Datumsformat DD.MM.JJJJ nutzen. Zweites Datum muss später als erstes sein.
      

      on (idTrigger,function(obj){
      if (isDateInRange('01.04.2016', '05.04.2016')) log('Date is in Range');
      else log('Date is not in Range');
      });

      Gruß,
      
      Pix
      
      Edit 15:28 Uhr: Code etwas optimiert. Erstes und zweites Datum sollten nicht gleich sein.

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Reply Last reply
      0
      • W Offline
        W Offline
        webseb79
        wrote on last edited by
        #3

        Hallo pix,

        recht herzlichen Dank für deinen Lösungsvorschlages und anhand deiner Beiträge würde ich sagen du stehst voll im Stoff mit Javascript.

        Funktioniert soweit erstmal, habe es als Globales Script angelegt genauso wie isTimeInRange.

        Ich habe jetzt einiges ausprobiert und hänge gerade bei meiner Weihnachtsbeleuchtung für außen.

        Dort will ich ein Zeitbereich und Datumsbereich gleichzeitig abfragen aber ich bekomme es nicht hin.

        Hast du vielleicht noch ein paar Beispiele?

        Danke und weiterhin gutes Gelingen mit Iobroker

        Sebastian

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pix
          wrote on last edited by
          #4

          Hallo,

          du kannst für die Weihnachtsbeleuchtung auch mit schedule schalten.

          Nehmen wir an, sie soll vom 01.12.2016 bis 10.01.2017 einschalten. Dazu setzt du am 1. Dezember eine Variable "Weihnachtsbeleuchtung" mit schedule auf true und am 10. Januar wieder auf false. Zur Sicherheit vielleicht nochmal am 2. und 3. Dezeber auf true, falls dein System am 1.12. nicht läuft….

          createState('Weihnachtsbeleuchtung', false, {
          name: 'Soll Weihnahctsbeleuchtung eingeschaltet werden',
          type: 'boolean'});
          
          var idLicht = 'javascript.0.Weihnachtsbeleuchtung';
          
          schedule("0 0 1 12 * ", function() { // 1.12\. Mitternacht
              setState(idLicht, true);
          });
          
          schedule("0 0 10 1 * ", function() { // 10.1\. Mitternacht
              setState(idLicht, false);
          });
          
          

          Wenn du jetzt dein Licht abends einschaltest (per Javascript [Wandtasterabfrage, Fernbedienung, …] oder auch über schedule), baust du immer die Abfrage mit ein:

          if (getState(idLicht).val) {
              // Befehl zum Einschalten
          }
          
          ````Dann wird das Licht nur eingeschaltet, wenn die Variable __'Weihnachtsbeleuchtung'__ auf true steht.
          
          Gruß
          
          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Reply Last reply
          0
          • EisbaeeerE Offline
            EisbaeeerE Offline
            Eisbaeeer
            Developer
            wrote on last edited by
            #5

            @pix:

            Zum Aufruf ein deutsches Datumsformat DD.MM.JJJJ nutzen. Zweites Datum muss später als erstes sein.

            on (idTrigger,function(obj){
               if (isDateInRange('01.04.2016', '05.04.2016')) log('Date is in Range');
               else log('Date is not in Range');
            });
            
            

            Gruß,

            Pix `

            Hallo Pix

            habe gerade dein Script in der Sammlung gefunden. Hab mich jetzt auf die Schnelle noch nicht in das Script eingelesen. Hast du auch eine Lösung für das "Standard" Datumsformat, welches ja VIS mit den Widgets von Haus aus mitbringt, wenn man z.B. "ctrl - input date" verwendet. Dann sieht das ganze in iobroker so aus:

            139_datum.png

            Gruß Eisbaeeer

            Kein support per PM. Bitte im Forum Fragen stellen!

            1 Reply Last reply
            0
            • P Offline
              P Offline
              pix
              wrote on last edited by
              #6

              Hallo,

              @Eisbaeeer:

              Hast du auch eine Lösung für das "Standard" Datumsformat, welches ja VIS mit den Widgets von Haus aus mitbringt, wenn man z.B. "ctrl - input date" verwendet. Dann sieht das ganze in iobroker so aus:

              filename="Datum.png" index="0">~~

              Gruß Eisbaeeer `

              Das wurde geändert für die Eingabe in amerikanischem Datumsformat.

              function addDate(strDate) {
                  var date = strDate.split('-');
                  var d = currentDate2();
                  d.setDate(date[2]);
                  d.setMonth(date[1]-1);
                  d.setFullYear(date[0]);
                  return d;
              }
              
              

              Aufruf

              on (idTrigger,function(obj){
                 if (isDateInRange('2016-05-16', '2016-05-17')) log('Date is in Range');
                 else log('Date is not in Range');
              });
              

              Gruß

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Reply Last reply
              0
              • rantanplanR Offline
                rantanplanR Offline
                rantanplan
                wrote on last edited by
                #7

                Hallo Pix

                Ich habe jetzt auch mal Dein Script "Datum in Bereich" ausprobiert.

                Dabei ist mir aufgefallen, dass wenn der aktuelle Tag mit dem letzen Tag des Bereichs übereinstimmt bereits "false" ausgegeben wird.

                In der Funktion "IsDateInRange" wird die Variable "now" mit````
                var now = new Date();

                
                Mit````
                new Date()
                ````wird auch immer die aktuelle Zeit übergeben.
                
                Dadurch wird die Bedingung````
                "....&& now <= upper..."
                ````nicht erfüllt wenn das Tagesdatum gleich ist.
                
                Mit der Zuweisung````
                var now = currentDate2();
                ````klappt es einwandfrei.
                
                

                //var now = new Date();
                var now = currentDate2();
                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');
                return inRange;

                
                Grüße

                Rantanplan

                CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  Mihaeru
                  wrote on last edited by
                  #8

                  @rantanplan:

                  Mit der Zuweisungvar now = currentDate2();klappt es einwandfrei. `

                  Auch eine Idee. Alternativ kann man auch einfach das upper Datum um einen Tag erhöhen. Dann kann man currentDate2 auch ganz weglassen:

                  function createDate(strDate) {
                      var date = strDate.split('.');
                      var d =  new Date(date[2], date[1]-1, date[0]);    
                      return d;
                  }
                  function isDateInRange(strLower, strUpper) {
                      var now = new Date();
                      var lower = createDate(strLower);
                      var upper = createDate(strUpper);
                      upper.setDate(upper.getDate() + 1);
                      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');
                      return inRange;
                  }
                  
                  1 Reply Last reply
                  0
                  • MicM Offline
                    MicM Offline
                    Mic
                    Developer
                    wrote on last edited by Mic
                    #9

                    Hi,

                    danke für die Scripts hier. Da ich es aktuell brauchte, habe ich es etwas optimiert.

                    /**
                     * Abfrage, ob ein Datum innerhalb eines Bereichs ist.
                     * Angeregt von: https://forum.iobroker.net/topic/2289/
                     * Zum Aufruf ist das ISO-Datumsformat JJJJ-MM-TT erforderlich, z.B. 2019-12-24.
                     * Autor: Mic
                     * Version: 0.1 - 28-Apr-2019
                     * Gepostet unter: https://forum.iobroker.net/post/256400
                     * @param {string}   strDateToCheck       Das zu prüfende Datum; 
                     *                                        Falls aktuelles Datum geprüft werden soll: 'now' eingeben.
                     * @param {string}   strDateFirst         Datum: Zeitraum erster Tag.
                     * @param {string}   strDateLast          Datum: Zeitraum letzter Tag.
                     */
                    function isDateInRange(strDateToCheck, strDateFirst, strDateLast) {
                        // Prepare the date we want to check. Either current date, or provided date in variable strDateToCheck
                        let dtToCheck;
                        if (strDateToCheck == 'now') {
                            dtToCheck = new Date();
                        } else {
                             dtToCheck = new Date(strDateToCheck);
                        }
                        dtToCheck.setHours(0, 0, 0, 0); // Same basis for hours, minutes etc. as for all dates
                        let dtFirst = new Date(strDateFirst);
                        dtFirst.setHours(0, 0, 0, 0);
                        let dtLast = new Date(strDateLast);
                        dtLast.setHours(0, 0, 0, 0);
                        let isInRange = false;
                        if (dtLast < dtFirst) {
                            // We need to swap the variables since user mixed up first and last date.
                            let dtTempFirst = dtFirst;
                            dtFirst = dtLast;
                            dtLast = dtTempFirst;
                            log('Function isDateInRange: first date is later than last date, but the function corrected this accordingly.', 'debug');
                        }
                        if ( (dtToCheck >= dtFirst) && (dtToCheck <= dtLast) )  {
                            isInRange = true;
                        }
                        return isInRange;
                    }
                    

                    Aufruf A: Prüfen ob aktuelles Datum innerhalb des Zeitraums 20.-30.04.liegt:

                    let res = isDateInRange('now', '2019-04-20', '2019-04-30');
                    

                    Aufruf B: Prüfen ob das Datum "25.04.2019" innerhalb des Zeitraums 20.-30.04. liegt:

                    let res = isDateInRange('2019-04-25', '2019-04-20', '2019-04-30');
                    
                    1 Reply Last reply
                    0
                    • W webseb79

                      Guten Abend liebes Forum,

                      in diesem Beitrag

                      http://forum.iobroker.org/viewtopic.php?t=1072

                      wird ein Script vorgestellt wo es um die Funktion zur Prüfung eines Zeitfenster geht.

                      Meine Frage ist, ob es möglich ist dieses Script umzuschreiben und auf ein Datumsbereich zu prüfen?

                      Danke im voraus

                      Sebastian

                      G Offline
                      G Offline
                      gutgut30
                      wrote on last edited by
                      #10

                      @webseb79 said in Frage: isTimeInRange umschreiben auf Datum:

                      Guten Abend liebes Forum,

                      in diesem Beitrag

                      http://forum.iobroker.org/viewtopic.php?t=1072

                      wird ein Script vorgestellt wo es um die Funktion zur Prüfung eines Zeitfenster geht.

                      Meine Frage ist, ob es möglich ist dieses Script umzuschreiben und auf ein Datumsbereich zu prüfen?

                      Danke im voraus

                      Sebastian

                      Gibt es das Script "isTimeInRange()" noch irgendwo zum kopieren?

                      CodierknechtC 1 Reply Last reply
                      0
                      • G gutgut30

                        @webseb79 said in Frage: isTimeInRange umschreiben auf Datum:

                        Guten Abend liebes Forum,

                        in diesem Beitrag

                        http://forum.iobroker.org/viewtopic.php?t=1072

                        wird ein Script vorgestellt wo es um die Funktion zur Prüfung eines Zeitfenster geht.

                        Meine Frage ist, ob es möglich ist dieses Script umzuschreiben und auf ein Datumsbereich zu prüfen?

                        Danke im voraus

                        Sebastian

                        Gibt es das Script "isTimeInRange()" noch irgendwo zum kopieren?

                        CodierknechtC Online
                        CodierknechtC Online
                        Codierknecht
                        Developer Most Active
                        wrote on last edited by
                        #11

                        @gutgut30 sagte in Frage: isTimeInRange umschreiben auf Datum:

                        Gibt es das Script "isTimeInRange()" noch irgendwo zum kopieren?

                        Ja - einen Beitrag über Deinem ;-)

                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                        HmIP|ZigBee|Tasmota|Unifi
                        Zabbix Certified Specialist
                        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                        G 1 Reply Last reply
                        0
                        • CodierknechtC Codierknecht

                          @gutgut30 sagte in Frage: isTimeInRange umschreiben auf Datum:

                          Gibt es das Script "isTimeInRange()" noch irgendwo zum kopieren?

                          Ja - einen Beitrag über Deinem ;-)

                          G Offline
                          G Offline
                          gutgut30
                          wrote on last edited by
                          #12

                          @codierknecht Oh je, da war ich richtig blind. Danke :)

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          537

                          Online

                          32.7k

                          Users

                          82.5k

                          Topics

                          1.3m

                          Posts
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Home
                          • Recent
                          • Tags
                          • Unread 0
                          • Categories
                          • Unreplied
                          • Popular
                          • GitHub
                          • Docu
                          • Hilfe