按日期过滤Outlook日历API结果

问题描述:

我使用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

找出来(或对我来说至少this SO question did it

事实证明,这些时间需要用引号引起来!

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

      }; 

而现在它的工作。

Grrr!

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