我正在使用Node(特别是node-outlook npm模块)来浏览我的Outlook.com日历并且基本请求正在运行。我正在从API返回结果,但是我遇到了oData请求参数的问题,只能在今天重新计算结果。这就是我所拥有的:
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似乎并不喜欢它呻吟于不兼容的二元运算符。)
任何人都可以建议我需要在参数中修改我们今天的活动吗?
由于
答案 0 :(得分:1)
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:
描述某个时间点的日期,时间和时区。
DateTime
DateTime
根据ISO 8601的组合日期和时间表示(T)中的单个时间点 格式。TimeZone
String
以下时区名称之一。
如何确定创建活动时的时区
OriginalStartTimezone
和OriginalEndTimezone
旨在反映出来 在创建或更新事件时设置了什么时区
答案 1 :(得分:1)
想出来(至少this SO question did it对我来说)
事实证明,时间需要用引号括起来!
var queryParams = {
'$orderby': 'Start/DateTime desc',
'$filter': "Start/DateTime ge '" + startDateString + "' and Start/DateTime le '" + endDateString + "'"
};
现在正在努力。
哎呀!