2016-10-28 77 views
0

我使用Node(特別是node-outlook npm模塊)來拉動Outlook.com日曆,並且基本請求正在工作。我從API獲取結果,但是我在oData請求參數方面遇到了麻煩,只能爲今天的結果做好準備。下面是我得到了什麼:按日期過濾Outlook日曆API結果

var queryParams = { 
    '$select': 'Subject,Start,End', 
    '$orderby': 'Start/DateTime desc', 
    //'$top': 10, 
    'startDateTime': startDateString, 
    'endDateTime': endDateString 
    //'$filter': "Start/DateTime ge " + startDateString + " and Start/DateTime le " + endDateString 

}; 

outlook.base.setApiEndpoint('https://outlook.office.com/api/v2.0'); 
outlook.base.setAnchorMailbox(<my email address>); 
outlook.base.setPreferredTimeZone('Europe/London'); 

outlook.calendar.getEvents({token:token, odataParams: queryParams},function(error, result){ 
    //Do some stuff with the event data here 
} 

不過,如果我使用的參數如上圖所示(其中startDateString爲2016-10-28T00:00:00和endDateString是2016-10-28T23:59:59)我仍然找回無論在過去和將來的事件。

這不是我想要的 - 我希望做的只是拉動當前的日子事件(因此嘗試使用oData $filter,但API似乎不喜歡那樣,它呻吟不兼容的二元運算符)。

任何人都可以提出什麼我需要修改的參數,以恢復今天的活動計劃?

感謝

編輯:這裏有被退回什麼,我一個例子:enter image description here

回答

1

找出來(或對我來說至少this SO question did it

事實證明,這些時間需要用引號引起來!

var queryParams = { 
       '$orderby': 'Start/DateTime desc', 
       '$filter': "Start/DateTime ge '" + startDateString + "' and Start/DateTime le '" + endDateString + "'" 

      }; 

而現在它的工作。

Grrr!

1

StartDateTimeEndDateTime性能表示爲DateTimeTimeZone值創建或更新事件的值(其中包括時區信息)當:

"StartDateTime": { 
    "DateTime": "2016-10-28T00:00:00", 
    "TimeZone": "Europe/London" //current time zone 
} 

是越來越轉換爲UTC值:

"StartDateTime": { 
    "DateTime": "2016-10-27T23:00:00", 
    "TimeZone": "UTC" 
} 

這同樣適用於過濾操作。這就是爲什麼startDateStringendDateTime值應該從本地時間轉換爲UTC,以獲得今天的事件。

例如,使用Moment.js library

var startDateStringUtc = moment(startDateString).toISOString(); 
var endDateStringUtc= moment(endDateString).toISOString(); 

var queryParams = { 
    '$select': 'Subject,Start,End', 
    '$orderby': 'Start/DateTime desc', 
    //'$top': 10, 
    'startDateTime': startDateStringUtc, 
    'endDateTime': endDateStringUtc 
    //'$filter': "Start/DateTime ge " + startDateString + " and Start/DateTime le " + endDateString 

}; 

關於DateTimeTimeZone結構

根據MSDN

描述了日期,時間,和時間的時間點的區。根據ISO 8601 格式

  • DateTimeDateTime的時間在組合的日期和時間表示法(T)的單個點。
  • TimeZoneString下列時區名稱之一。

如何確定時區事件時,創建

OriginalStartTimezoneOriginalEndTimezone旨在反映 什麼時區的情況下創建或更新時設置

+0

我剛試過這個,它仍然拉回過去和未來的事件....值是2016-10-31T00:00:00.000Z和2016-10-31T23:59:59.000Z使用上面的代碼 – LDJ