Hallo alle zusammen, ich habe mir einen MagicMirror gebaut und habe eine Frage zum Code, da ich selbst eher weniger mit Json auskenne und es einfach nicht hinbekomme. Auf der Seite werden meine Termine aus dem Google Kalender angezeigt. Leider alle, was insgesamt ziemlich viel wird, daher möchte ich entweder die Anzahl die angezeigt wird begrenzen oder (noch besser) ich möchte ein dynamisches End-Datum erzeigen (also heute+1Monat o.ä) und nur alle Termine innerhalb der Zeitspanne anzeigen. Der Code ist nicht von mir, und der Code-Schreiber hat es wohl auch nicht sorecht hinbekommen und hat mit "var dates = rule.between(new Date(), new Date(2016,12,31), true, function (date, i){return i < 10});" ein fixes Enddatum hergenommen. Mit diesem funktioniert dass auch, aber sobald ich etwas wie newDate()+1000*60*60*24*31 nehme geht nichts mehr. Ich hoffe ihr könnt mir helfen! (function updateCalendarData() { new ical_parser("calendar.php", function(cal){ events = cal.getEvents(); eventList = []; for (var i in events) { var e = events[i]; for (var key in e) { var value = e[key]; var seperator = key.search(';'); if (seperator >= 0) { var mainKey = key.substring(0,seperator); var subKey = key.substring(seperator+1); var dt; if (subKey == 'VALUE=DATE') { //date dt = new Date(value.substring(0,4), value.substring(4,6) - 1, value.substring(6,8)); } else { //time dt = new Date(value.substring(0,4), value.substring(4,6) - 1, value.substring(6,8), value.substring(9,11), value.substring(11,13), value.substring(13,15)); } if (mainKey == 'DTSTART') e.startDate = dt; if (mainKey == 'DTEND') e.endDate = dt; } } if (e.startDate == undefined){ //some old events in Gmail Calendar is "start_date" //FIXME: problems with Gmail's TimeZone var days = moment(e.DTSTART).diff(moment(), 'days'); var seconds = moment(e.DTSTART).diff(moment(), 'seconds'); var startDate = moment(e.DTSTART); } else { var days = moment(e.startDate).diff(moment(), 'days'); var seconds = moment(e.startDate).diff(moment(), 'seconds'); var startDate = moment(e.startDate); } //only add fututre events, days doesn't work, we need to check seconds if (seconds >= 0) { if (seconds <= 60*60*5 || seconds >= 60*60*24*2) { var time_string = moment(startDate).fromNow(); }else { var time_string = moment(startDate).calendar() } if (!e.RRULE) { eventList.push({'description':e.SUMMARY,'seconds':seconds,'days':time_st ring}); } e.seconds = seconds; } // Special handling for rrule events if (e.RRULE) { var options = new RRule.parseString(e.RRULE); options.dtstart = e.startDate; var rule = new RRule(options); // TODO: don't use fixed end date here, use something like now() + 1 year var dates = rule.between(new Date(), new Date(2016,12,31), true, function (date, i){return i < 10}); for (date in dates) { var dt = new Date(dates[date]); var days = moment(dt).diff(moment(), 'days'); var seconds = moment(dt).diff(moment(), 'seconds'); var startDate = moment(dt); if (seconds >= 0) { if (seconds <= 60*60*5 || seconds >= 60*60*24*2) { var time_string = moment(dt).fromNow(); } else { var time_string = moment(dt).calendar() } eventList.push({'description':e.SUMMARY,'seconds':seconds,'days':time_st ring}); } } } }; eventList.sort(function(a,b){return a.seconds-b.seconds}); setTimeout(function() { updateCalendarData(); }, 60000); }); })(); (function updateCalendar() { table = $('<table/>').addClass('xsmall').addClass('calendar-table'); opacity = 1; for (var i in eventList) { var e = eventList[i]; var row = $('<tr/>').css('opacity',opacity); row.append($('<td/>').html(e.description).addClass('description')); row.append($('<td/>').html(e.days).addClass('days dimmed')); table.append(row); opacity -= 1 / eventList.length; } $('.calendar').updateWithText(table,1000); setTimeout(function() { updateCalendar(); }, 1000); })();
:
Verschoben durch User
sollte das nicht now()+1000*60*60*24*31 sein? ohne die ganzen Klassen zu kennen ist das auch schwieriger.. benutz doch gleich die Google Kalender Api
:
Bearbeitet durch User
Philipp K. schrieb: > sollte das nicht now()+1000*60*60*24*31 sein? "new Date()" ist "now". Dracarys schrieb: > new Date()+1000*60*60*24*31 Das geht so nicht... aus dem "Date"-objekt wird dann ein String, und an den deine Zahl drangehängt. Zuerst Datum in "Millisekunden seit 1.1.1970" umrechnen, addieren, zurückrechnen: new Date((new Date()).getTime()+1000*60*60*24*31)
Danke für eure Antworten, leider funktinoiert dein Vorschlag nicht, er zeigt trotzdem noch alle Termine an. Und nicht nur dass, er fängt sogar das spinnen an und zeigt manche Termine doppelt an. Falls es weiter Hilft ist hier der Komplette Code zum Download: https://github.com/MichMich/MagicMirror Trotzdem Danke für eure Mühe!
Nehm doch einfach die google Kalender API, die ist umfangreicher und besser dokumentiert. Schau mal hier rein! https://developers.google.com/google-apps/calendar/quickstart/js Ich verstehe auch nicht ganz die Kombination.. ist das php gemischt mit javascript das Du gerade benutzt? Eigentlich benutzt man die Api mit einem von beiden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.