Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Frage: isTimeInRange umschreiben auf Datum

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 8 Kommentatoren 3.7k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • W Offline
    W Offline
    webseb79
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • EisbaeeerE Offline
        EisbaeeerE Offline
        Eisbaeeer
        Developer
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • rantanplanR Offline
            rantanplanR Offline
            rantanplan
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              Mihaeru
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • MicM Offline
                MicM Offline
                Mic
                Developer
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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 Offline
                    CodierknechtC Offline
                    Codierknecht
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #12

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

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      887

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe