首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按日期过滤Outlook日历API的结果

按日期过滤Outlook日历API的结果
EN

Stack Overflow用户
提问于 2016-10-28 08:16:41
回答 2查看 1K关注 0票数 0

我正在使用Node (特别是节点- Outlook.com模块)来完成我的Outlook.com日历,并且基本请求正在工作。我从API中得到了结果,但是我在oData请求参数上遇到了问题,只能恢复今天的结果。我要说的是:

代码语言:javascript
运行
复制
 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似乎不喜欢它,它抱怨不兼容的二进制操作符)。

有人能告诉我,我需要修改什么才能让今天的活动重新开始吗?

谢谢

编辑:下面是返回内容的示例:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-31 07:02:38

弄明白了(至少对我来说是这个问题解决了 )

事实证明,时代需要用引号括起来!

代码语言:javascript
运行
复制
var queryParams = {
                '$orderby': 'Start/DateTime desc',
                '$filter': "Start/DateTime ge '" + startDateString + "' and Start/DateTime le '" + endDateString + "'"

            };

现在起作用了。

哦!

票数 1
EN

Stack Overflow用户

发布于 2016-10-28 16:05:54

在创建或更新值(包括时区信息)时,StartDateTimeEndDateTime属性表示为DateTimeTimeZone值:

代码语言:javascript
运行
复制
"StartDateTime": {
   "DateTime": "2016-10-28T00:00:00",
   "TimeZone": "Europe/London" //current time zone
}  

正在转换为UTC值:

代码语言:javascript
运行
复制
"StartDateTime": {
   "DateTime": "2016-10-27T23:00:00",  
   "TimeZone": "UTC" 
}  

过滤操作也是如此。这就是为什么startDateStringendDateTime值应该从本地时间转换为UTC以获取当前事件的原因。

例如,使用Moment.js库

代码语言:javascript
运行
复制
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下列时区名称之一。

如何确定事件创建时的时区

OriginalStartTimezoneOriginalEndTimezone用于反映事件创建或更新时设置的时区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40300834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档