【问题标题】:Filtering Outlook Calendar API results by date按日期筛选 Outlook 日历 API 结果
【发布时间】:2016-10-28 08:16:41
【问题描述】:

我正在使用 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 似乎不喜欢这样,它呻吟着关于不兼容的二元运算符)。

谁能建议我需要在参数中修改什么才能恢复今天安排的活动?

谢谢

编辑:这是我返回的示例:

【问题讨论】:

    标签: node.js office365 outlook.com outlook-api


    【解决方案1】:

    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

    描述某个时间点的日期、时间和时区。

    • DateTime DateTime 根据 ISO 8601 的组合日期和时间表示 (T) 中的单个时间点 格式。
    • TimeZone String 以下时区名称之一。

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

    OriginalStartTimezoneOriginalEndTimezone 旨在反映 创建或更新事件时设置的时区

    【讨论】:

    • 我刚试过这个,它仍然拉回过去和未来的事件....值是 2016-10-31T00:00:00.000Z 和 2016-10-31T23:59:59.000Z 使用以上代码
    【解决方案2】:

    想通了(或者至少对我来说是this SO question did it

    原来时间需要用引号括起来!

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

    现在它开始工作了。

    咕噜!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2010-09-28
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多