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. JavaScript
  5. [gelöst] Einfacher Countdown in VIS von festem Datum gesucht

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    506

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

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

[gelöst] Einfacher Countdown in VIS von festem Datum gesucht

Scheduled Pinned Locked Moved JavaScript
javascript
72 Posts 6 Posters 9.9k Views 9 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.
  • liv-in-skyL liv-in-sky

    bitte nutze dieses file

    // Termin Skript zählt bis Termin runter erstellt: 26.01.2016 von Pix
    // weiterverarbeitet 26-2-2019 von liv-in-sky
    var instanz = 'javascript.0'; var logging = false;
    // ab hier nix mehr ändern
    createState('Countdown.Termin.Datum', '9/4/2019', { name: 'Termin Datum', desc: 'Datum des Termins (als Objekt)', type: 'string' });
    createState('Countdown.Termin.Datum.String', '3.12.2019', { name: 'Termin Datum (als String)', desc: 'Datum des Termins als Zeichenkette', type: 'string' });
    createState('Countdown.Termin.Name', 'Name des Termins', { name: 'Termin Name', desc: 'Bezeichnung des Termins', type: 'string' });
    createState('Countdown.Termin.Rest.TotalText', 'Termingesamt', { name: 'TotalText', desc: 'TotalText', type: 'string' });
    createState('Countdown.Termin.Rest.Total', { name: 'Millisekunden bis zum Termin', desc: 'Restliche Millisekunden bis zum Datum des Termins', type: 'number', unit: 'ms' });
    createState('Countdown.Termin.Rest.Tage', { name: 'Tage bis zum Termin', desc: 'Restliche Tage bis zum Datum des Termins', type: 'number', unit: 'Tage' });
    createState('Countdown.Termin.Rest.Minuten', { name: 'Minuten bis zum Termin', desc: 'Restliche Tage bis zum Datum des Termins', type: 'number', unit: 'Minuten' });
    createState('Countdown.Termin.Rest.Stunden', { name: 'Stunden bis zum Termin', desc: 'Restliche Tage bis zum Datum des Termins', type: 'number', unit: 'Stunden' });
    createState('Countdown.Termin.Rest.Wochen', { name: 'Wochen bis zum Termin', desc: 'Restliche Wochen bis zum Datum des Termins', type: 'number', unit: 'Wochen' });
    createState('Countdown.Termin.Rest.Alarm', { name: 'Alarm', desc: 'Alarm bis zum Datum des Termins', type: 'boolean' });
    createState('Countdown.Termin.Rest.Fertig', { name: 'Fertig', desc: 'Fertig', type: 'boolean' });
    var idFertig = instanz + '.Countdown.Termin.Rest.Fertig', idAlarm = instanz + '.Countdown.Termin.Rest.Alarm', idStunden = instanz + '.Countdown.Termin.Rest.Stunden', idMinuten = instanz + '.Countdown.Termin.Rest.Minuten', idTotalText = instanz + '.Countdown.Termin.Rest.TotalText', idTerminDatum = instanz + '.Countdown.Termin.Datum', idTerminDatumString = instanz + '.Countdown.Termin.Datum.String', idTerminName = instanz + '.Countdown.Termin.Name', idTotal = instanz + '.Countdown.Termin.Rest.Total', idTage = instanz + '.Countdown.Termin.Rest.Tage', idWochen = instanz + '.Countdown.Termin.Rest.Wochen';
    var deadline;

    function getTimeRemaining(endtime) {

    var virttime = new Date();

    var virt2time=formatDate(virttime);
    var t = Date.parse(endtime) - Date.parse(virttime);

    if (virttime.getTimezoneOffset() == -60 && virttime.getTimezoneOffset() == -120 ){t=t+3600000};
    if (virttime.getTimezoneOffset() == -120 && virttime.getTimezoneOffset() == -60 ){t=t-3600000};
    var seconds = Math.floor( (t/1000) % 60 );
    var minutes = Math.floor( (t/1000/60) % 60 );
    var hours = Math.floor( (t/(10006060)) % 24 );
    var days = Math.floor( t/(1000606024) );
    var weeks = Math.floor( t/(1000
    606024*7) );
    return { 'total': t, 'days': days, 'hours': hours, 'minutes': minutes, 'seconds': seconds, 'weeks' : weeks };

    }
    function restzeit() {

    if (deadline) deadline = new Date(getState(idTerminDatum).val);
    setState(idTerminDatumString, formatDate(deadline));
    setState(idTage, getTimeRemaining(deadline).days);
    setState(idWochen, getTimeRemaining(deadline).weeks);
    setState(idTotal, getTimeRemaining(deadline).total);
    setState(idMinuten, getTimeRemaining(deadline).minutes);
    setState(idStunden, getTimeRemaining(deadline).hours);
    //log(deadline.getTimezoneOffset());

    setState(idTotalText, getTimeRemaining(deadline).days.toString() + " Tag(e) " +getTimeRemaining(deadline).hours.toString() + " Stunde(n) " + getTimeRemaining(deadline).minutes.toString() + " Minute(n) ");
    setTimeout(function () { //The timer

    if ( getState(idTage).val == 0 && getState(idStunden).val <= 4 ){setState(idAlarm, true) ;} else {setState(idAlarm, false); } //
    }, 2000);
    setTimeout(function () { //The timer
    if ( getState(idTage).val == 0 && getState(idStunden).val == 0 && getState(idMinuten).val <= 0 ){setState(idFertig, true) ;setState(idTerminName, "FERTIG");setState(idTerminDatum, "FERTIG");} else {setState(idFertig, false); } //
    }, 3000);
    if (logging) log(getTimeRemaining(deadline).days + ' Resttage (' + getTimeRemaining(deadline).weeks + ' Wochen) bis zum ' + formatDate(deadline) + ' (' + getState(idTerminName).val + ')'); }
    // Mitternacht

    schedule('*/1 * * * *', function() { restzeit(); });
    //bei Restart
    var datecounter = getState("javascript.0.Countdown.Termin.Datum").val;
    if (getState("javascript.0.Countdown.Termin.Datum").val != "") {
    setStateDelayed("javascript.0.Countdown.Termin.Datum", datecounter, 2000, false);}
    // Bei Terminänderung
    on({id: 'javascript.0.Countdown.Termin.Datum', change: 'any'}, function (obj) { deadline = new Date(obj.state.val); restzeit();/log("jetzt gestartet");/ });
    //on(idTerminDatum, function (obj ) { deadline = new Date(obj.state.val); restzeit(); });

    // Scriptstart

    das forum verändert die sterne im script !!!

    @mehrwiedu - könntest du bitte dieses file unter spoiler in den ersten post kopieren - habe alle sterne entfernt

    @Jey-Cee hallo jeycee - ist dieser fehler bekannt - wenn man als kommentar in einem javascript ein -stern-schrägstrich- verwendet, gibt es probleme beim kopieren

    M Offline
    M Offline
    mehrwiedu
    wrote on last edited by
    #45

    @liv-in-sky sagte in [gelöst] Einfacher Countdown in VIS von festem Datum gesucht:

    @mehrwiedu - könntest du bitte dieses file unter spoiler in den ersten post kopieren - habe alle sterne entfernt

    Habe ich oben eingefügt und auch den Code-Tag erstmal entfernt.

    liv-in-skyL 1 Reply Last reply
    0
    • M mehrwiedu

      @liv-in-sky sagte in [gelöst] Einfacher Countdown in VIS von festem Datum gesucht:

      @mehrwiedu - könntest du bitte dieses file unter spoiler in den ersten post kopieren - habe alle sterne entfernt

      Habe ich oben eingefügt und auch den Code-Tag erstmal entfernt.

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      wrote on last edited by
      #46

      @mehrwiedu vielen dank

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      1 Reply Last reply
      0
      • C Offline
        C Offline
        Camuri
        wrote on last edited by
        #47

        Irgendwas läuft da noch falsch :D in 12 Tagen ist schon der 10.8.2019

        46314642b30bd6a09679b1c1bcf5c79c.png

        liv-in-skyL 2 Replies Last reply
        0
        • C Camuri

          Irgendwas läuft da noch falsch :D in 12 Tagen ist schon der 10.8.2019

          46314642b30bd6a09679b1c1bcf5c79c.png

          liv-in-skyL Offline
          liv-in-skyL Offline
          liv-in-sky
          wrote on last edited by
          #48

          @Camuri

          du machst es einem aber auch nicht einfach ! :-)

          bei mir sieht es so aus

          Image 12.png

          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

          C 1 Reply Last reply
          0
          • liv-in-skyL liv-in-sky

            @Camuri

            du machst es einem aber auch nicht einfach ! :-)

            bei mir sieht es so aus

            Image 12.png

            C Offline
            C Offline
            Camuri
            wrote on last edited by
            #49

            @liv-in-sky sagte in [gelöst] Einfacher Countdown in VIS von festem Datum gesucht:

            @Camuri

            du machst es einem aber auch nicht einfach ! :-)

            bei mir sieht es so aus

            Image 12.png

            Woher bekommt er denn Uhrzeit und Datum was wir aktuell haben? Wenn ich das Datum von morgen eintrage zeigt er mir 1 Stunde und 10 Minuten an

            1 Reply Last reply
            0
            • C Camuri

              Irgendwas läuft da noch falsch :D in 12 Tagen ist schon der 10.8.2019

              46314642b30bd6a09679b1c1bcf5c79c.png

              liv-in-skyL Offline
              liv-in-skyL Offline
              liv-in-sky
              wrote on last edited by
              #50

              @Camuri

              die uhrzeit / datum deines iobrokers sollte wohl stimmen ?

              terminal öffnen und date eingeben
              Image 13.png

              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

              C 1 Reply Last reply
              0
              • liv-in-skyL liv-in-sky

                @Camuri

                die uhrzeit / datum deines iobrokers sollte wohl stimmen ?

                terminal öffnen und date eingeben
                Image 13.png

                C Offline
                C Offline
                Camuri
                wrote on last edited by
                #51

                ja da passt alles :/

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  Camuri
                  wrote on last edited by
                  #52

                  habs jetzt auf einem anderen iobroker System probiert das Skript da zeigt es auch 12 Tage an

                  liv-in-skyL 1 Reply Last reply
                  0
                  • C Camuri

                    habs jetzt auf einem anderen iobroker System probiert das Skript da zeigt es auch 12 Tage an

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    wrote on last edited by
                    #53

                    @Camuri

                    ich habe im moment keine idee ?

                    • hast du in den einstellungen vom admin das datum DD.MM.YYYY?
                    • lebst du auf dem mars oder einen anderen planeten ?
                    • bei dir müßte ja der 29 juli oder so sein ?
                    • was kommt den am: 8 Oct 2019 raus ?

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    C 1 Reply Last reply
                    0
                    • liv-in-skyL liv-in-sky

                      @Camuri

                      ich habe im moment keine idee ?

                      • hast du in den einstellungen vom admin das datum DD.MM.YYYY?
                      • lebst du auf dem mars oder einen anderen planeten ?
                      • bei dir müßte ja der 29 juli oder so sein ?
                      • was kommt den am: 8 Oct 2019 raus ?
                      C Offline
                      C Offline
                      Camuri
                      wrote on last edited by
                      #54

                      @liv-in-sky sagte in [gelöst] Einfacher Countdown in VIS von festem Datum gesucht:

                      @Camuri

                      ich habe im moment keine idee ?

                      • hast du in den einstellungen vom admin das datum DD.MM.YYYY?
                      • lebst du auf dem mars oder einen anderen planeten ?
                      • bei dir müßte ja der 29 juli oder so sein ?
                      • was kommt den am: 8 Oct 2019 raus ?
                      1. Admin hat bei beiden Iorbokern DD.MM.YYYY
                      2. ich lebe auf der Erde :D
                      3. das ist gut möglich
                      4. 17 Tag(e) 4 Stunde(n) 33 Minute(n)

                      wenn ich den 15.03.2020 eingebe kommt bei beiden Iobroker 31 Tag(e) 9 Stunde(n) 32 Minute(n)

                      hast du vll beim Sterne rausmachen irgendwas verändert?

                      1 Reply Last reply
                      0
                      • liv-in-skyL Offline
                        liv-in-skyL Offline
                        liv-in-sky
                        wrote on last edited by
                        #55

                        @Camuri ja du hast recht - kopiere ich den spoiler in ein script bei mir - kommt das auch raus 12 tage

                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                        1 Reply Last reply
                        0
                        • liv-in-skyL Offline
                          liv-in-skyL Offline
                          liv-in-sky
                          wrote on last edited by
                          #56

                          @Camuri gehts damit

                          script-im-txt.txt

                          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                          C 1 Reply Last reply
                          0
                          • liv-in-skyL liv-in-sky

                            @Camuri gehts damit

                            script-im-txt.txt

                            C Offline
                            C Offline
                            Camuri
                            wrote on last edited by
                            #57

                            @liv-in-sky sagte in [gelöst] Einfacher Countdown in VIS von festem Datum gesucht:

                            @Camuri gehts damit

                            script-im-txt.txt

                            Funktioniert danke :D

                            42e236de282e9249738bb68fd9f9c9db.png

                            1 Reply Last reply
                            0
                            • liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              wrote on last edited by
                              #58

                              1445small--robots-winzig.png

                              yeah

                              sorry - was ein blöder fehler

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              1 Reply Last reply
                              1
                              • liv-in-skyL Offline
                                liv-in-skyL Offline
                                liv-in-sky
                                wrote on last edited by
                                #59

                                es gibt eine neue version

                                neues format bei datumseingabe: folgendes ist möglich:

                                • 9.4.2019 10:00
                                • 9.4.2019
                                • 9 May 2019 10:00 - (Monat 3 Buchstaben engl. Abkürzung)
                                • 9 May 2019 - (Monat 3 Buchstaben engl. Abkürzung)

                                zwischen datum und uhrzeit nur ein "leerzeichen"

                                DatumCountdownScript.txt

                                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

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

                                  Hallo,

                                  ist zwar schon zwei Monate alt, aber ich bin gerade auf einem Umweg auf diesen Thread gestossen. Habe eine ähnliche Lösung. Vielleicht will jemand das lieber so haben:

                                  Bildschirmfoto 2019-05-17 um 19.45.52.jpg

                                  /* Termin
                                  Skript zählt bis Termin runter
                                  http://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/
                                  
                                  Monate zu berechnen macht keinen Sinn, da Monate unterschiedliche Längen haben.
                                  Es müssten dann konkret die Monate, die vergehen werden addiert werden (Schaltjahre)
                                  
                                  26.01.2016 erstellt von Pix
                                  01.11.2018 Code optimiert anch erneutem Einbau in VIS
                                  */
                                  
                                  const instanz = "javascript.0";
                                  const logging = true;
                                  const fC = false;
                                  
                                  // ab hier nix mehr ändern
                                  
                                  const idTerminDatum =       instanz + ".Countdown.Termin.Datum",
                                        idTerminDatumString = instanz + ".Countdown.Termin.Datum.String",
                                        idTerminName =        instanz + ".Countdown.Termin.Name",
                                        idTotal =             instanz + ".Countdown.Termin.Rest.Total",
                                        idTage =              instanz + ".Countdown.Termin.Rest.Tage",
                                        idWochen =            instanz + ".Countdown.Termin.Rest.Wochen",
                                        idWochenRestTage =    instanz + ".Countdown.Termin.Rest.WochenResttage";
                                  
                                  createState(idTerminDatum, "9/4/2016", fC, {
                                      name: "Termin Datum",
                                      desc: "Datum des Termins (als Objekt)",
                                      type: "string",
                                      role: "date"
                                  });
                                  createState(idTerminDatumString, "3.12.2016", fC, {
                                      name: "Termin Datum (als String)",
                                      desc: "Datum des Termins als Zeichenkette",
                                      type: "string",
                                      role: "text"
                                  });
                                  createState(idTerminName, "Name des Termins", fC, {
                                      name: "Termin Name",
                                      desc: "Bezeichnung des Termins",
                                      type: "string",
                                      role : "text"
                                  });
                                  createState(idTotal, 0, fC, {
                                      name: "Millisekunden bis zum Termin",
                                      desc: "Restliche Millisekunden bis zum Datum des Termins",
                                      type: "number",
                                      unit: "ms",
                                      role: "level"
                                  });
                                  createState(idTage, 0, fC, {
                                      name: "Tage bis zum Termin",
                                      desc: "Restliche Tage bis zum Datum des Termins",
                                      type: "number",
                                      unit: "Tage",
                                      role: "level"
                                  });
                                  createState(idWochen, 0, fC, {
                                      name: "Wochen bis zum Termin",
                                      desc: "Restliche ganze Wochen bis zum Datum des Termins",
                                      type: "number",
                                      unit: "Wochen",
                                      role: "level"
                                  });
                                  createState(idWochenRestTage, 0, fC, {
                                      name: "Tage nach glatten Wochen bis zum Termin",
                                      desc: "Restliche Tage bei mehreren Wochen bis zum Datum des Termins",
                                      type: "number",
                                      unit: "Tage",
                                      role: "level"
                                  });
                                  
                                  
                                  let deadline;
                                  
                                  function getTimeRemaining(endtime){
                                    let t = Date.parse(endtime) - Date.parse(new Date());
                                    let seconds = Math.floor( (t/1000) % 60 );
                                    let minutes = Math.floor( (t/1000/60) % 60 );
                                    let hours = Math.floor( (t/(1000*60*60)) % 24 );
                                    let days = Math.floor( t/(1000*60*60*24) );
                                    let weeks = Math.floor( t/(1000*60*60*24*7) );
                                    return {
                                      "total": t,
                                      "days": days,
                                      "hours": hours,
                                      "minutes": minutes,
                                      "seconds": seconds,
                                      "weeks" : weeks,
                                      "weeks_days": days - (weeks*7)
                                    };
                                  }
                                  
                                  function restzeit() {
                                      if (!deadline) deadline = new Date(getState(idTerminDatum).val);
                                      setState(idTerminDatumString, formatDate(deadline));
                                      setState(idTage, getTimeRemaining(deadline).days);
                                      setState(idWochen, getTimeRemaining(deadline).weeks);
                                      setState(idTotal, getTimeRemaining(deadline).total);
                                      setState(idWochenRestTage, getTimeRemaining(deadline).weeks_days);
                                      if (logging) log(getTimeRemaining(deadline).days + " Resttage (" + getTimeRemaining(deadline).weeks + " Wochen) bis zum " + formatDate(deadline) + " (" + getState(idTerminName).val + ")"); 
                                  }
                                  
                                  // Mitternacht
                                  schedule("56 14 * * *", function() {
                                      restzeit();
                                  });
                                  
                                  // Bei Terminänderung
                                  on(idTerminDatum, function (obj) {
                                      deadline = new Date(obj.state.val);
                                      restzeit();
                                  });
                                  
                                  // Scriptstart
                                  //restzeit();
                                  

                                  Datenpunkte:

                                  Bildschirmfoto 2019-05-17 um 19.48.59.jpg

                                  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

                                  liv-in-skyL ChaotC 2 Replies Last reply
                                  0
                                  • P pix

                                    Hallo,

                                    ist zwar schon zwei Monate alt, aber ich bin gerade auf einem Umweg auf diesen Thread gestossen. Habe eine ähnliche Lösung. Vielleicht will jemand das lieber so haben:

                                    Bildschirmfoto 2019-05-17 um 19.45.52.jpg

                                    /* Termin
                                    Skript zählt bis Termin runter
                                    http://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/
                                    
                                    Monate zu berechnen macht keinen Sinn, da Monate unterschiedliche Längen haben.
                                    Es müssten dann konkret die Monate, die vergehen werden addiert werden (Schaltjahre)
                                    
                                    26.01.2016 erstellt von Pix
                                    01.11.2018 Code optimiert anch erneutem Einbau in VIS
                                    */
                                    
                                    const instanz = "javascript.0";
                                    const logging = true;
                                    const fC = false;
                                    
                                    // ab hier nix mehr ändern
                                    
                                    const idTerminDatum =       instanz + ".Countdown.Termin.Datum",
                                          idTerminDatumString = instanz + ".Countdown.Termin.Datum.String",
                                          idTerminName =        instanz + ".Countdown.Termin.Name",
                                          idTotal =             instanz + ".Countdown.Termin.Rest.Total",
                                          idTage =              instanz + ".Countdown.Termin.Rest.Tage",
                                          idWochen =            instanz + ".Countdown.Termin.Rest.Wochen",
                                          idWochenRestTage =    instanz + ".Countdown.Termin.Rest.WochenResttage";
                                    
                                    createState(idTerminDatum, "9/4/2016", fC, {
                                        name: "Termin Datum",
                                        desc: "Datum des Termins (als Objekt)",
                                        type: "string",
                                        role: "date"
                                    });
                                    createState(idTerminDatumString, "3.12.2016", fC, {
                                        name: "Termin Datum (als String)",
                                        desc: "Datum des Termins als Zeichenkette",
                                        type: "string",
                                        role: "text"
                                    });
                                    createState(idTerminName, "Name des Termins", fC, {
                                        name: "Termin Name",
                                        desc: "Bezeichnung des Termins",
                                        type: "string",
                                        role : "text"
                                    });
                                    createState(idTotal, 0, fC, {
                                        name: "Millisekunden bis zum Termin",
                                        desc: "Restliche Millisekunden bis zum Datum des Termins",
                                        type: "number",
                                        unit: "ms",
                                        role: "level"
                                    });
                                    createState(idTage, 0, fC, {
                                        name: "Tage bis zum Termin",
                                        desc: "Restliche Tage bis zum Datum des Termins",
                                        type: "number",
                                        unit: "Tage",
                                        role: "level"
                                    });
                                    createState(idWochen, 0, fC, {
                                        name: "Wochen bis zum Termin",
                                        desc: "Restliche ganze Wochen bis zum Datum des Termins",
                                        type: "number",
                                        unit: "Wochen",
                                        role: "level"
                                    });
                                    createState(idWochenRestTage, 0, fC, {
                                        name: "Tage nach glatten Wochen bis zum Termin",
                                        desc: "Restliche Tage bei mehreren Wochen bis zum Datum des Termins",
                                        type: "number",
                                        unit: "Tage",
                                        role: "level"
                                    });
                                    
                                    
                                    let deadline;
                                    
                                    function getTimeRemaining(endtime){
                                      let t = Date.parse(endtime) - Date.parse(new Date());
                                      let seconds = Math.floor( (t/1000) % 60 );
                                      let minutes = Math.floor( (t/1000/60) % 60 );
                                      let hours = Math.floor( (t/(1000*60*60)) % 24 );
                                      let days = Math.floor( t/(1000*60*60*24) );
                                      let weeks = Math.floor( t/(1000*60*60*24*7) );
                                      return {
                                        "total": t,
                                        "days": days,
                                        "hours": hours,
                                        "minutes": minutes,
                                        "seconds": seconds,
                                        "weeks" : weeks,
                                        "weeks_days": days - (weeks*7)
                                      };
                                    }
                                    
                                    function restzeit() {
                                        if (!deadline) deadline = new Date(getState(idTerminDatum).val);
                                        setState(idTerminDatumString, formatDate(deadline));
                                        setState(idTage, getTimeRemaining(deadline).days);
                                        setState(idWochen, getTimeRemaining(deadline).weeks);
                                        setState(idTotal, getTimeRemaining(deadline).total);
                                        setState(idWochenRestTage, getTimeRemaining(deadline).weeks_days);
                                        if (logging) log(getTimeRemaining(deadline).days + " Resttage (" + getTimeRemaining(deadline).weeks + " Wochen) bis zum " + formatDate(deadline) + " (" + getState(idTerminName).val + ")"); 
                                    }
                                    
                                    // Mitternacht
                                    schedule("56 14 * * *", function() {
                                        restzeit();
                                    });
                                    
                                    // Bei Terminänderung
                                    on(idTerminDatum, function (obj) {
                                        deadline = new Date(obj.state.val);
                                        restzeit();
                                    });
                                    
                                    // Scriptstart
                                    //restzeit();
                                    

                                    Datenpunkte:

                                    Bildschirmfoto 2019-05-17 um 19.48.59.jpg

                                    Gruß
                                    Pix

                                    liv-in-skyL Offline
                                    liv-in-skyL Offline
                                    liv-in-sky
                                    wrote on last edited by liv-in-sky
                                    #61

                                    @pix

                                    hallo @pix - das ursprüngliche script ist von dir - ich habe es nur abgeändert

                                    ist schon wieder eine zeit her aber ich glaube, ich habe den sommer winterzeit unterschied eingefügt

                                    wie auch immer - in meinem script /erster post) steht noch dein name drin - hoffe das stört dich nicht

                                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

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

                                      Oh, hab ich gar nicht gesehn :-D Alles gut, schönes Wochenende

                                      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
                                      • P pix

                                        Hallo,

                                        ist zwar schon zwei Monate alt, aber ich bin gerade auf einem Umweg auf diesen Thread gestossen. Habe eine ähnliche Lösung. Vielleicht will jemand das lieber so haben:

                                        Bildschirmfoto 2019-05-17 um 19.45.52.jpg

                                        /* Termin
                                        Skript zählt bis Termin runter
                                        http://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/
                                        
                                        Monate zu berechnen macht keinen Sinn, da Monate unterschiedliche Längen haben.
                                        Es müssten dann konkret die Monate, die vergehen werden addiert werden (Schaltjahre)
                                        
                                        26.01.2016 erstellt von Pix
                                        01.11.2018 Code optimiert anch erneutem Einbau in VIS
                                        */
                                        
                                        const instanz = "javascript.0";
                                        const logging = true;
                                        const fC = false;
                                        
                                        // ab hier nix mehr ändern
                                        
                                        const idTerminDatum =       instanz + ".Countdown.Termin.Datum",
                                              idTerminDatumString = instanz + ".Countdown.Termin.Datum.String",
                                              idTerminName =        instanz + ".Countdown.Termin.Name",
                                              idTotal =             instanz + ".Countdown.Termin.Rest.Total",
                                              idTage =              instanz + ".Countdown.Termin.Rest.Tage",
                                              idWochen =            instanz + ".Countdown.Termin.Rest.Wochen",
                                              idWochenRestTage =    instanz + ".Countdown.Termin.Rest.WochenResttage";
                                        
                                        createState(idTerminDatum, "9/4/2016", fC, {
                                            name: "Termin Datum",
                                            desc: "Datum des Termins (als Objekt)",
                                            type: "string",
                                            role: "date"
                                        });
                                        createState(idTerminDatumString, "3.12.2016", fC, {
                                            name: "Termin Datum (als String)",
                                            desc: "Datum des Termins als Zeichenkette",
                                            type: "string",
                                            role: "text"
                                        });
                                        createState(idTerminName, "Name des Termins", fC, {
                                            name: "Termin Name",
                                            desc: "Bezeichnung des Termins",
                                            type: "string",
                                            role : "text"
                                        });
                                        createState(idTotal, 0, fC, {
                                            name: "Millisekunden bis zum Termin",
                                            desc: "Restliche Millisekunden bis zum Datum des Termins",
                                            type: "number",
                                            unit: "ms",
                                            role: "level"
                                        });
                                        createState(idTage, 0, fC, {
                                            name: "Tage bis zum Termin",
                                            desc: "Restliche Tage bis zum Datum des Termins",
                                            type: "number",
                                            unit: "Tage",
                                            role: "level"
                                        });
                                        createState(idWochen, 0, fC, {
                                            name: "Wochen bis zum Termin",
                                            desc: "Restliche ganze Wochen bis zum Datum des Termins",
                                            type: "number",
                                            unit: "Wochen",
                                            role: "level"
                                        });
                                        createState(idWochenRestTage, 0, fC, {
                                            name: "Tage nach glatten Wochen bis zum Termin",
                                            desc: "Restliche Tage bei mehreren Wochen bis zum Datum des Termins",
                                            type: "number",
                                            unit: "Tage",
                                            role: "level"
                                        });
                                        
                                        
                                        let deadline;
                                        
                                        function getTimeRemaining(endtime){
                                          let t = Date.parse(endtime) - Date.parse(new Date());
                                          let seconds = Math.floor( (t/1000) % 60 );
                                          let minutes = Math.floor( (t/1000/60) % 60 );
                                          let hours = Math.floor( (t/(1000*60*60)) % 24 );
                                          let days = Math.floor( t/(1000*60*60*24) );
                                          let weeks = Math.floor( t/(1000*60*60*24*7) );
                                          return {
                                            "total": t,
                                            "days": days,
                                            "hours": hours,
                                            "minutes": minutes,
                                            "seconds": seconds,
                                            "weeks" : weeks,
                                            "weeks_days": days - (weeks*7)
                                          };
                                        }
                                        
                                        function restzeit() {
                                            if (!deadline) deadline = new Date(getState(idTerminDatum).val);
                                            setState(idTerminDatumString, formatDate(deadline));
                                            setState(idTage, getTimeRemaining(deadline).days);
                                            setState(idWochen, getTimeRemaining(deadline).weeks);
                                            setState(idTotal, getTimeRemaining(deadline).total);
                                            setState(idWochenRestTage, getTimeRemaining(deadline).weeks_days);
                                            if (logging) log(getTimeRemaining(deadline).days + " Resttage (" + getTimeRemaining(deadline).weeks + " Wochen) bis zum " + formatDate(deadline) + " (" + getState(idTerminName).val + ")"); 
                                        }
                                        
                                        // Mitternacht
                                        schedule("56 14 * * *", function() {
                                            restzeit();
                                        });
                                        
                                        // Bei Terminänderung
                                        on(idTerminDatum, function (obj) {
                                            deadline = new Date(obj.state.val);
                                            restzeit();
                                        });
                                        
                                        // Scriptstart
                                        //restzeit();
                                        

                                        Datenpunkte:

                                        Bildschirmfoto 2019-05-17 um 19.48.59.jpg

                                        Gruß
                                        Pix

                                        ChaotC Offline
                                        ChaotC Offline
                                        Chaot
                                        wrote on last edited by
                                        #63

                                        @pix Danke dir.
                                        Hast du eventuell noch das Widget als Export?
                                        Mir ist noch nicht ganz klar wo ich den Termin schreiben soll.
                                        Wenn ich den string ändere wird nichts gezählt und was anderes kann ich scheinbar nicht verändern.

                                        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                        1 Reply Last reply
                                        0
                                        • ChaotC Offline
                                          ChaotC Offline
                                          Chaot
                                          wrote on last edited by
                                          #64

                                          Lass mich mal bischen weiterspinnen:

                                          Ich nehme aus dem Kalender die Geburtstage der Familienmitglieder (eigenen Kalender anlegen) und zähle dann bis zum nächsten Geburtstag.
                                          Ist der Termin vorbei wird der nächste anstehende Termin genommen und gezählt.
                                          Ist sowas umsetzbar?

                                          P.S. Ich habe meinen Fehler gefunden.

                                          ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                          liv-in-skyL 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

                                          331

                                          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