javascript中的Google Calendar API时区覆盖

时间:2015-11-05 21:41:00

标签: javascript google-api timezone google-calendar-api momentjs

我开发了一个网站,用作数字显示监视器幻灯片,将多个不同的Google日历合并为一个视图。 http://www.anokaramsey.edu/events/displays

我遇到了时区问题。我们正处于中部时间。数字显示器具有超级糟糕的配置,以便将该网站显示为幻灯片。因此,它会从美国东部时间的云浏览器定期浏览网站,并将图像发送到我们的数字显示软件。 http://webshots.channelshd.com/remoteImages/anokaramsey-1.png

所以事件在显示器上呈现为EST,但是我需要他们继续使用CST。我正在使用moment.js&矩timezone.js。

这是我的javascript尝试设置正确的时区,但无济于事。

    ...
                  var request = gapi.client.calendar.events.list({
                      'calendarId': cals[c],
                          'timeMin': (new Date()).toISOString(),
                          'lazyFetching': false,
                          'showDeleted': false,
                          'singleEvents': true,
                          'maxResults': 5,
                          'futureevents': true,
                          'orderBy': 'startTime'
                  });

                  request.execute(function (resp) {
                      for (i = 0; i < resp.items.length; i++) {
                          gevents.push(resp.items[i]); // keep. to monitor original gcal objects.
                          var start = resp.items[i].start.dateTime;
                          if (!start) {
                              start = resp.items[i].start.date;
                          };
                          var end = resp.items[i].end.dateTime;
                          if (!end) {
                              end = resp.items[i].end.date;
                          };

                          events.push({
                              id: resp.items[i].id,
                              title: resp.items[i].summary,
                              cal: resp.items[i].organizer.email,
                              start: start,
                              end: end,
                              url: resp.items[i].htmlLink,
                              location: resp.items[i].location,
                              descr: resp.items[i].description
                          });
                      }
                  });
              }
          }
    ...
          function display(events) {
              if (events.length > 0) {

                  events.sort(function (a, b) {
                      // super simple sort
                      return new Date(a.start) - new Date(b.start);
                  });

                  for (i = 0; i < events.length; i++) {
                      var event = events[i];
                      var when = event.start;
                      var until = event.end;

                      var header = moment(when).format("MMM D, YYYY");

                      if (header != oldHeader) {
                          var id = moment(when);
                          //appendPre('<h3>'+header+'</h3>');
                          appendPre('<ul id="' + id + '">');
                      }

var startTime = moment(when).tz("America/Chicago").format("h:mma");
var endTime = moment(until).tz("America/Chicago").format("h:mma");

    ...

您应该能够看到顶部网址中的所有互通文件,但如果有更多代码可以提供帮助,请告知我们。

1 个答案:

答案 0 :(得分:1)

如果您在网站上打开开发者控制台,则会出现错误消息说明问题:

screenshot

您正在加载moment.jsmoment-timezone.js,但尚未填充任何时区数据。

通常会想要覆盖世界的所有时区,因此会使用moment-timezone-all-years.jsmoment-timezone-2010-2020.js,具体取决于您关注的数据范围。您需要加载这些而不是 moment-timezone.js

但是,在您的情况下,我认为您只需要一个时区的相对当前数据,因此我将继续加载moment-timezone.js并在您自己的脚本中手动填充该单个区域:

moment.tz.add("America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0");

您可以read more about data loading in the documentation查看moment-timezone-with-data-2010-2020.js文件,查找其他特定时区数据。