0

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

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

谢谢

编辑:这是我返回的示例:在此处输入图像描述

4

2 回答 2

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" 
}  

这同样适用于过滤操作。这就是为什么要将值从本地时间转换为 UTC 以获取startDateString今天事件的原因。endDateTime

例如,使用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结构

根据MSDN

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

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

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

OriginalStartTimezone并且OriginalEndTimezone旨在反映创建或更新事件时设置的时区

于 2016-10-28T16:05:54.303 回答
1

想通了(或者至少这个SO问题为我做了)

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

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

            };

现在它的工作。

呸!

于 2016-10-31T07:02:38.053 回答