我正在使用Node (特别是节点- Outlook.com模块)来完成我的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似乎不喜欢它,它抱怨不兼容的二进制操作符)。
有人能告诉我,我需要修改什么才能让今天的活动重新开始吗?
谢谢
编辑:下面是返回内容的示例:
发布于 2016-10-31 07:02:38
弄明白了(至少对我来说是这个问题解决了 )
事实证明,时代需要用引号括起来!
var queryParams = {
'$orderby': 'Start/DateTime desc',
'$filter': "Start/DateTime ge '" + startDateString + "' and Start/DateTime le '" + endDateString + "'"
};
现在起作用了。
哦!
发布于 2016-10-28 16:05:54
在创建或更新值(包括时区信息)时,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库
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
structure的
根据MSDN
描述时间点的日期、时间和时区。
DateTime
DateTime
:根据ISO 8601格式以合并的日期和时间表示(T)的单一时间点。TimeZone
String
下列时区名称之一。如何确定事件创建时的时区
OriginalStartTimezone
和OriginalEndTimezone
用于反映事件创建或更新时设置的时区。
https://stackoverflow.com/questions/40300834
复制相似问题