2015-11-05 53 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