按日期过滤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似乎不喜欢那样,它呻吟不兼容的二元运算符)。
任何人都可以提出什么我需要修改的参数,以恢复今天的活动计划?
感谢
答
找出来(或对我来说至少this SO question did it)
事实证明,这些时间需要用引号引起来!
var queryParams = {
'$orderby': 'Start/DateTime desc',
'$filter': "Start/DateTime ge '" + startDateString + "' and Start/DateTime le '" + endDateString + "'"
};
而现在它的工作。
Grrr!
答
StartDateTime
和EndDateTime
性能表示为DateTimeTimeZone
值创建或更新事件的值(其中包括时区信息)当:
"StartDateTime": {
"DateTime": "2016-10-28T00:00:00",
"TimeZone": "Europe/London" //current time zone
}
是越来越转换为UTC值:
"StartDateTime": {
"DateTime": "2016-10-27T23:00:00",
"TimeZone": "UTC"
}
这同样适用于过滤操作。这就是为什么startDateString
和endDateTime
值应该从本地时间转换为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 格式
DateTime
DateTime
的时间在组合的日期和时间表示法(T)的单个点。TimeZone
String
下列时区名称之一。
如何确定时区事件时,创建
OriginalStartTimezone
和OriginalEndTimezone
旨在反映 什么时区的情况下创建或更新时设置
我刚试过这个,它仍然拉回过去和未来的事件....值是2016-10-31T00:00:00.000Z和2016-10-31T23:59:59.000Z使用上面的代码 – LDJ