// Termin Skript zählt bis Termin runter erstellt: 26.01.2016 von Pix // weiterverarbeitet 26-2-2019 von liv-in-sky //moegliche formate fur das datum - uhrzeit optional // 9.4.2019 10:00 // 9.4.2019 // 9 May 2019 10:00 - (Monat 3 Buchstaben engl. Abkuerzung) // 9 May 2019 - (Monat 3 Buchstaben engl. Abkuerzung) 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/(1000*60*60)) % 24 ); var days = Math.floor( t/(1000*60*60*24) ); var weeks = Math.floor( t/(1000*60*60*24*7) ); return { 'total': t, 'days': days, 'hours': hours, 'minutes': minutes, 'seconds': seconds, 'weeks' : weeks }; } function restzeit() { if (deadline) var str = getState("javascript.0.Countdown.Termin.Datum").val; if (logging) log(str.indexOf(".")); if (str.indexOf(".") > 0) { var dmyall = str.split(" "); if (logging) log(dmyall[0] + ' ' + dmyall[1]); var dmy = dmyall[0].split("."); if (logging) log(dmy[0] + dmy[1] + dmy[2] + dmyall[0] + dmyall[1]); if (typeof(dmyall[1]) != 'undefined') {deadline = new Date(dmy[1] +'.'+ dmy[0] + '.' + dmy[2] + ' ' + dmyall[1]);if (logging) log("mit Zeit")} else { deadline = new Date(dmy[1] +'.'+ dmy[0] + '.' + dmy[2]);if (logging) log("keine Zeit")}} else {deadline = new Date(getState(idTerminDatum).val);if (logging) log("altes Datumsformat)"); } 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("4.5.2019"); restzeit(); }); // Scriptstart