2015-11-05 52 views
2

我开发了一个用作数字显示屏幻灯片的网站,将几个不同的Google日历合并到一个视图中。 http://www.anokaramsey.edu/events/displaysjavascript中的Google Calendar API时区覆盖

我遇到了时区问题。我们在中部时间。数字显示器具有超级随机配置,以便将本网站作为幻灯片展示。所以它从EST的云端浏览器定期浏览网站,并将图像发送到我们的数字显示软件。 http://webshots.channelshd.com/remoteImages/anokaramsey-1.png

因此,事件正在显示器上呈现给EST,但我需要它们留在CST上。我正在使用moment.js & moment-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"); 

    ... 

你应该能够看到从上面的网址中的所有文件互通,但如果更多的代码会有所帮助,请让我知道。

+0

准确地说,你的意思是“但无济于事”。听起来像“它不工作”,但我们真的需要知道*它如何*它不起作用,以帮助你。 –

+0

此外,它将有助于了解如何检索'when'和'until',或者至少提供样本值。我不确定你的问题是关于顶部还是底部,或者他们的相关问题。 –

+0

javascript“不起作用”,因为当我试图将它保留在CST上时,显示器上反映的时区已恢复为EST。 – mbelmont

回答

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文件来查找其他特定时区数据。

+0

谢谢!这对我有帮助。 – mbelmont