int5749 hat geschrieben: ↑24. Feb 2020 22:16
an welcher Stelle hast Du dies in ie *.js gesetzt? Und drehst Du den Monat nicht um +1 nach vorne??
Bei mir ist es auch in der online Version um +1 Tag :-/
VG
Jörg
Ich habe mittlerweile zwei js Versionen im Einsatz, da ich leider nicht so sehr versiert bin, um den Fehler zu finden:
- eine, die nur online arbeitet
- eine weitere, die nur offline arbeitet
Ich habe jetzt diese "lokalen" Versionen im Einsatz:
abfall_heute_lokal.js
Code: Alles auswählen
(function(i) {
var Ical = function Ical(){
this.version = '';
this.prodid = '';
this.events = [];
this.todos = [];
this.journals = [];
this.freebusys = [];
}
var xprops = 'x-[^:;]+';
var ianaprops = '[\\w]+[^:;]+'
var icalParser = {
icals : [],
propsList : {
'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
},
parseIcal : function(icsString){
var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
for(var index in cals){
//console.log("--->"+index+" "+cals[index]);
var ical = new Ical();
ical.version = this.getValue('VERSION',cals[index]);
ical.prodid = this.getValue('PRODID',cals[index]);
cals[index] = cals[index].replace(/\r\n /g,'');
cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
matches = cals[index].match(reg);
if(matches){
for(i=0;i<matches.length;i++){
//console.log('---------->'+matches[i]+"\n<------------");
this.parseVComponent(matches[i],ical);
}
}
this.icals[this.icals.length] = ical;
}
},
parseVComponent : function(vComponent,ical){
var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
//console.log(nameComponent+' ++++ '+vComponent);
var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
if(props){
var component=[];
for(var index in props){
var nom = props[index].replace(/[:;].*$/,'');
//console.log("--vcompo "+index+" "+nom);
var propKey = /*'prop_'+*/nom.toLowerCase();
if(component[propKey]===undefined) component[propKey] = [];
component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
component['raw'] = vComponent;
}
if(ical[nameComponent+'s'] !== undefined)
ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
}
},
getValue: function(propName,line){
//console.log(line);
var prop={};
line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
var matches = reg.exec(line);
if(matches){ //on a trouvé la propriété cherchée
//console.log(propName+' ==] params='+RegExp.$2+' / valeur='+RegExp.$3);
var valeur = RegExp.$3;
var tab_params=[];
if(RegExp.$2.length>0){ //il y a des paramètres associés
var params = RegExp.$2.substr(1).split(';');
var pair;
for(k=0;k<params.length;k++){
pair = params[k].split('=');
if(!pair[1]) pair[1] = pair[0];
tab_params[pair[0]] = pair[1];
}
}
prop = { value:valeur,name:propName };
if(Object.keys(tab_params).length>0)
prop.params = tab_params;
}
return prop;
},
}
/**
* Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
*/
function calenDateFrom(icalStr) {
var strYear = icalStr.substr(0,4);
var strMonth = parseInt(icalStr.substr(4,2),10)-1;
var strDay = icalStr.substr(6,2);
var oDate = new Date(strYear,strMonth, strDay, 0,0,0,0)
return oDate;
}
var dateCurrent = new Date();
var abfall = "";
//read current date and remove time stamps, just the plain date is needed
dateCurrent.setHours(0,0,0,0)
icalParser.parseIcal(input);
var event = icalParser.icals[0].events[0];
//parse through all events in the calendar
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray)
{
var dateStart = calenDateFrom(currentValue.dtstart[0].value);
//check if the event happens today
if (dateCurrent.getTime() == dateStart.getTime()){
abfall = abfall + " + " + currentValue.summary[0].value;
}
});
if (abfall == "") return "false";
else return abfall.substring(3);
})(input);
abfall_morgen_lokal.js
Code: Alles auswählen
(function(i) {
var Ical = function Ical(){
this.version = '';
this.prodid = '';
this.events = [];
this.todos = [];
this.journals = [];
this.freebusys = [];
}
var xprops = 'x-[^:;]+';
var ianaprops = '[\\w]+[^:;]+'
var icalParser = {
icals : [],
propsList : {
'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
},
parseIcal : function(icsString){
var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
for(var index in cals){
//console.log("--->"+index+" "+cals[index]);
var ical = new Ical();
ical.version = this.getValue('VERSION',cals[index]);
ical.prodid = this.getValue('PRODID',cals[index]);
cals[index] = cals[index].replace(/\r\n /g,'');
cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
matches = cals[index].match(reg);
if(matches){
for(i=0;i<matches.length;i++){
//console.log('---------->'+matches[i]+"\n<------------");
this.parseVComponent(matches[i],ical);
}
}
this.icals[this.icals.length] = ical;
}
},
parseVComponent : function(vComponent,ical){
var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
//console.log(nameComponent+' ++++ '+vComponent);
var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
if(props){
var component=[];
for(var index in props){
var nom = props[index].replace(/[:;].*$/,'');
//console.log("--vcompo "+index+" "+nom);
var propKey = /*'prop_'+*/nom.toLowerCase();
if(component[propKey]===undefined) component[propKey] = [];
component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
component['raw'] = vComponent;
}
if(ical[nameComponent+'s'] !== undefined)
ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
}
},
getValue: function(propName,line){
//console.log(line);
var prop={};
line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
var matches = reg.exec(line);
if(matches){ //on a trouvé la propriété cherchée
//console.log(propName+' ==] params='+RegExp.$2+' / valeur='+RegExp.$3);
var valeur = RegExp.$3;
var tab_params=[];
if(RegExp.$2.length>0){ //il y a des paramètres associés
var params = RegExp.$2.substr(1).split(';');
var pair;
for(k=0;k<params.length;k++){
pair = params[k].split('=');
if(!pair[1]) pair[1] = pair[0];
tab_params[pair[0]] = pair[1];
}
}
prop = { value:valeur,name:propName };
if(Object.keys(tab_params).length>0)
prop.params = tab_params;
}
return prop;
},
}
/**
* Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
*/
function calenDateFrom(icalStr) {
var strYear = icalStr.substr(0,4);
var strMonth = parseInt(icalStr.substr(4,2),10)-1;
var strDay = icalStr.substr(6,2);
var oDate = new Date(strYear,strMonth, strDay, 0,0,0,0)
return oDate;
}
//read current date and remove time stamps, just the plain date is needed
var dateTomorrow = new Date();
dateTomorrow.setHours(0,0,0,0)
dateTomorrow.setDate(dateTomorrow.getDate()+1);
var abfall = "";
icalParser.parseIcal(input);
var event = icalParser.icals[0].events[0];
//parse through all events in the calendar
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray)
{
var dateStart = calenDateFrom(currentValue.dtstart[0].value);
//check if the event happens today
if (dateTomorrow.getTime() == dateStart.getTime()){
abfall = abfall + " + " + currentValue.summary[0].value;
}
});
if (abfall == "") return "false";
else return abfall.substring(3);
})(input);
abfall_naechste_abholung_datum_lokal.js
Code: Alles auswählen
(function(i) {
var Ical = function Ical(){
this.version = '';
this.prodid = '';
this.events = [];
this.todos = [];
this.journals = [];
this.freebusys = [];
}
var xprops = 'x-[^:;]+';
var ianaprops = '[\\w]+[^:;]+'
var icalParser = {
icals : [],
propsList : {
'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
},
parseIcal : function(icsString){
var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
for(var index in cals){
//console.log("--->"+index+" "+cals[index]);
var ical = new Ical();
ical.version = this.getValue('VERSION',cals[index]);
ical.prodid = this.getValue('PRODID',cals[index]);
cals[index] = cals[index].replace(/\r\n /g,'');
cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
matches = cals[index].match(reg);
if(matches){
for(i=0;i<matches.length;i++){
//console.log('---------->'+matches[i]+"\n<------------");
this.parseVComponent(matches[i],ical);
}
}
this.icals[this.icals.length] = ical;
}
},
parseVComponent : function(vComponent,ical){
var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
//console.log(nameComponent+' ++++ '+vComponent);
var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
if(props){
var component=[];
for(var index in props){
var nom = props[index].replace(/[:;].*$/,'');
//console.log("--vcompo "+index+" "+nom);
var propKey = /*'prop_'+*/nom.toLowerCase();
if(component[propKey]===undefined) component[propKey] = [];
component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
component['raw'] = vComponent;
}
if(ical[nameComponent+'s'] !== undefined)
ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
}
},
getValue: function(propName,line){
//console.log(line);
var prop={};
line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
var matches = reg.exec(line);
if(matches){ //on a trouvé la propriété cherchée
//console.log(propName+' ==] params='+RegExp.$2+' / valeur='+RegExp.$3);
var valeur = RegExp.$3;
var tab_params=[];
if(RegExp.$2.length>0){ //il y a des paramètres associés
var params = RegExp.$2.substr(1).split(';');
var pair;
for(k=0;k<params.length;k++){
pair = params[k].split('=');
if(!pair[1]) pair[1] = pair[0];
tab_params[pair[0]] = pair[1];
}
}
prop = { value:valeur,name:propName };
if(Object.keys(tab_params).length>0)
prop.params = tab_params;
}
return prop;
},
}
/**
* Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
*/
function calenDateFrom(icalStr) {
var strYear = icalStr.substr(0,4);
//months range from 0 - 11 in javascript!
var strMonth = parseInt(icalStr.substr(4,2),10)-1;
var strDay = icalStr.substr(6,2);
var oDate = new Date(strYear,strMonth, strDay, 0, 0, 0, 0)
return oDate;
}
function leadingZero(num) {
var s = num+"";
if (s.length < 2) s = "0" + s;
return s;
}
//months range from 0 - 11 in javascript!
var dateTemp = new Date(2500,11,31);
var dateCurrent = new Date();
//remove hours:min:sec, just the plain date is needed
dateCurrent.setHours(0,0,0,0)
icalParser.parseIcal(input);
var event = icalParser.icals[0].events[0];
//parse through all events in the calendar
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray)
{
var dateStart = calenDateFrom(currentValue.dtstart[0].value);
//loop through all events and find the one with the lowest date, but after the current date (important for unsorted *.ics files)
if (dateStart.getTime() > dateCurrent.getTime() && dateStart.getTime() < dateTemp.getTime())
{
dateTemp = dateStart;
}
});
if (dateTemp.getFullYear()=="2500"){
return "false";
}else{
//turn 1-9 into 01-09
var month = leadingZero(dateTemp.getMonth()+1);
var day = leadingZero(dateTemp.getDate());
//return correct format for openhab DateTime item
return dateTemp.getFullYear() + "-" + month + "-" + day + "T00:00:00";
}
})(input);
bfall_naechste_abholung_name_lokal.js
Code: Alles auswählen
(function(i) {
var Ical = function Ical(){
this.version = '';
this.prodid = '';
this.events = [];
this.todos = [];
this.journals = [];
this.freebusys = [];
}
var xprops = 'x-[^:;]+';
var ianaprops = '[\\w]+[^:;]+'
var icalParser = {
icals : [],
propsList : {
'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
},
parseIcal : function(icsString){
var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
for(var index in cals){
//console.log("--->"+index+" "+cals[index]);
var ical = new Ical();
ical.version = this.getValue('VERSION',cals[index]);
ical.prodid = this.getValue('PRODID',cals[index]);
cals[index] = cals[index].replace(/\r\n /g,'');
cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
matches = cals[index].match(reg);
if(matches){
for(i=0;i<matches.length;i++){
//console.log('---------->'+matches[i]+"\n<------------");
this.parseVComponent(matches[i],ical);
}
}
this.icals[this.icals.length] = ical;
}
},
parseVComponent : function(vComponent,ical){
var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
//console.log(nameComponent+' ++++ '+vComponent);
var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
if(props){
var component=[];
for(var index in props){
var nom = props[index].replace(/[:;].*$/,'');
//console.log("--vcompo "+index+" "+nom);
var propKey = /*'prop_'+*/nom.toLowerCase();
if(component[propKey]===undefined) component[propKey] = [];
component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
component['raw'] = vComponent;
}
if(ical[nameComponent+'s'] !== undefined)
ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
}
},
getValue: function(propName,line){
//console.log(line);
var prop={};
line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
var matches = reg.exec(line);
if(matches){ //on a trouvé la propriété cherchée
//console.log(propName+' ==] params='+RegExp.$2+' / valeur='+RegExp.$3);
var valeur = RegExp.$3;
var tab_params=[];
if(RegExp.$2.length>0){ //il y a des paramètres associés
var params = RegExp.$2.substr(1).split(';');
var pair;
for(k=0;k<params.length;k++){
pair = params[k].split('=');
if(!pair[1]) pair[1] = pair[0];
tab_params[pair[0]] = pair[1];
}
}
prop = { value:valeur,name:propName };
if(Object.keys(tab_params).length>0)
prop.params = tab_params;
}
return prop;
},
}
/**
* Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
*/
function calenDateFrom(icalStr) {
var strYear = icalStr.substr(0,4);
var strMonth = parseInt(icalStr.substr(4,2),10)-1;
var strDay = icalStr.substr(6,2);
var oDate = new Date(strYear,strMonth, strDay, 0,0,0,0)
return oDate;
}
var abfall = "";
//months range from 0 - 11 in javascript!
var dateTemp = new Date(2500,11,31);
var dateCurrent = new Date();
//remove hours:min:sec, just the plain date is needed
dateCurrent.setHours(0,0,0,0)
icalParser.parseIcal(input);
var event = icalParser.icals[0].events[0];
//parse through all events in the calendar
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray)
{
var dateStart = calenDateFrom(currentValue.dtstart[0].value);
//loop through all events and find the one with the lowest date, but after the current date (important for unsorted *.ics files)
if (dateStart.getTime() > dateCurrent.getTime() && dateStart.getTime() < dateTemp.getTime())
{
dateTemp = dateStart;
}
});
if (dateTemp.getFullYear()!="2500")
{
icalParser.icals[0].events.forEach(function (currentValue, index, originalArray)
{
var dateStart = calenDateFrom(currentValue.dtstart[0].value);
var content = currentValue.summary[0].value;
//check if the event happens today
if (dateStart.getTime() == dateTemp.getTime()){
abfall = abfall + " + " + content;
}
});
return abfall.substring(3);
}else{
return "false";
}
})(input);
Hoffe sehr, das dir dies weiterhilft.
Gruß
Marcus