var abfall = false; (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[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;k0) 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 strHour = 0; var strMin = 0; var strSec = 0; var oDate = new Date(strYear,strMonth, strDay, strHour, strMin, strSec) return oDate; } function calenDateTo(icalStr) { var strYear = icalStr.substr(0,4); var strMonth = parseInt(icalStr.substr(4,2),10)-1; var strDay = icalStr.substr(6,2); var strHour = 23; var strMin = 59; var strSec = 59; var oDate = new Date(strYear,strMonth, strDay, strHour, strMin, strSec) return oDate; } var stopper = 0; icalParser.parseIcal(input); var event = icalParser.icals[0].events[0]; icalParser.icals[0].events.forEach(function (currentValue, index, originalArray) { /** * Prüfen ob das aktuelle Datum zwischen zwei Daten liegt, bzw. auf einen Tag fällt */ var dateFrom = calenDateFrom(currentValue.dtstart[0].value); var dateTo = calenDateTo(currentValue.dtend[0].value); var dateCheck = new Date(); if (dateFrom > dateCheck && stopper == 0){ //var dateTo2 = dateTo.toString(); //var dateTo2 = new Date(dateTo).toLocaleString(); abfall = dateTo.getFullYear() + "-" + (dateTo.getMonth() + 1) + "-" + (dateTo.getDate() -1) + "T00:00:00" stopper = 1; } }); return abfall; })(input);