2017-05-24 64 views
1

我正在將事件從Office365導入到FullCalendar以顯示在網站上,但顯示的時間與Office365上的事件設置的時間偏移1小時(即事件設置爲14:00:00爲被顯示爲13:00:00),我被卡住了,無法弄清楚爲什麼會發生這種情況。FullCalendar來自Office365的日期偏移

功能創建日曆事件:日曆

function getTentativeEvents(){ 

    client 

     .api("/me/calendars/"+calID1+"/calendarview/?$top=3000&$filter=ShowAs eq 'Tentative'&startDateTime="+calStartDate+"&endDateTime="+calEndDate) 

     .select("Subject,Start,Id,End,Categories") 

     .get((err, res) => { 

      if (err) { 

       console.log(err); 

       return; 

      } 

      console.log(res); 

      var catNameFound = ""; 

      var categoryTitleTotal = timeSlotsCategoryTitleArray.length; 

      var arrayLength = res['value'].length; 

      var counter = arrayLength -1; 

      for (var i = 0; i < arrayLength; i++) { 

       var eveColour = defaultTimeSlotBackgroundColour; 

       var eveTxtColour = defaultTimeSlotTextColour; 

       var categoriesLength = res['value'][i]['categories'].length; 

       if(categoriesLength >= 1){ 

        for (var i2 = 0; i2 < categoriesLength; i2++) { 

         var catNameFound = res['value'][i]['categories'][i2]; 

         catNameFound = catNameFound.toLowerCase(); 

         for (var i3 = 0; i3 < categoryTitleTotal; i3++) { 

          var timeSlotToCheck = timeSlotsCategoryTitleArray[i3]; 

          timeSlotToCheck = timeSlotToCheck.toLowerCase(); 

          //console.log(catNameFound); 

          if(timeSlotToCheck == catNameFound){ 

           eveColour = timeSlotsBackgroundColourArray[i3]; 

           eveTxtColour = timeSlotsTextColourArray[i3]; 

          } 

         } 

        } 

       } 

       eventSubject = res['value'][i]['subject']; 

       eventID = res['value'][i]['id']; 

       startDate = res['value'][i]['start']['dateTime']; 

       endDate = res['value'][i]['end']['dateTime']; 

       startDate = startDate.replace(".0000000", ""); 

       endDate = endDate.replace(".0000000", ""); 

       addToEventList(eventSubject,startDate,endDate,eventID,eveColour,eveTxtColour);   

      } 

      // 

      $('#calendar1').fullCalendar('gotoDate', '<?php echo $theDateAfter; ?>'); 

      $("#calendar1").fullCalendar('addEventSource', timeSlotsArray); 

      $('#calendarLoader').hide(); 

      $('#calendar1').show(); 

    }); 

而且參數:

header: { 

     left: 'prev,next today', 

     center: 'title', 

     right: '' 

}, 

    defaultView: 'agendaDay', 

    defaultDate: '<?php echo $theDateAfter; ?>', 

    eventColor: defaultTimeSlotBackgroundColour, 

    minTime: "10:00:00", 

    timezone: "Europe/London", 

    ignoreTimezone: false, 

    maxTime: "20:00:00", 

    editable: false 

我檢查Office365的設置,並正確設置爲UTC + 0(倫敦)。

我錯過了什麼?

+0

實際導入數據的開始/結束時間是什麼樣子的?他們是否有指定的時區? – ADyson

+0

他們來這樣的:2017-05-26T12:00:00.0000000,我正在修剪額外的零,你可以看到代碼。 –

+0

它可能與它現在在英國的夏季時間有關,所以時鐘比UTC早一個小時。 https://www.timeanddate.com/worldclock/converted.html?iso=20130911T160009&p1=0&p2=136 Office365可能會顯示BST時間?檢查導出的數據與Office屏幕上實際顯示的內容,並且這些日期也沒有指定任何可能混淆事件的時區。 – ADyson

回答

1

這是因爲時間以UTC返回而發生的。您需要將它們轉換爲當地時間。有一個很好的庫叫moment.js。您可以使用該庫使用以下代碼:

var localTime = moment.utc(startDate).toDate(); 
    localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');