Bestimmte Anzahl von Google Kalender Terminen einbinden

Gast #4313367
Lesenswert?
• ▲
▼
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);
  })();
Gast #4313807
Lesenswert?
• ▲
▼
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)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.