2016-10-28 3 views
0

Node (특히 노드 출력 npm 모듈)를 사용하여 Outlook.com 일정 관리를 끌어오고 기본 요청이 작동합니다. API에서 결과를 얻고 있지만 oData 요청 매개 변수에 문제가있어 오늘 결과 만 얻으려고합니다. 내가 매개 변수가 위와 같이되어 사용하는 경우, 그러나Outlook 캘린더 API 결과를 날짜순으로 필터링

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는 그런 것처럼 보이지 않습니다. 호환되지 않는 2 진 연산자).

누구든지 오늘 params에서 수정해야 할 이벤트를 알리면됩니다.

감사

편집 : 여기가 돌려지고있는 무슨의 예 : 만들거나 (시간대 정보 포함) 값을 이벤트를 업데이트 할 때 enter image description here

답변

1

알아 냈습니다 (적어도 나를 위해 this SO question did it)

시간이 따옴표로 묶여 있어야합니다.

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

      }; 

이제는 작동합니다.

Grrr!

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로는 :

는 시점의 날짜, 시간 및 시간대를 설명 . ISO 8601에 따른 형식

  • DateTimeDateTime결합 된 날짜 및 시간 표시 (T)의 시간의 단일 포인트.
  • TimeZoneString다음 표준 시간대 이름 중 하나입니다.
이벤트가

OriginalStartTimezoneOriginalEndTimezone을 만들 때 을 반영하기위한 것입니다 시간대를 결정하는 방법

어떤 시간대 이벤트를 만들거나 업데이트 할 때 설정

+0

방금 ​​시도한 결과가 과거와 미래의 이벤트를 되돌려 놓았습니다. 값은 위 코드를 사용하여 2016-10-31T00 : 00 : 00.000Z와 2016-10-31T23 : 59 : 59.000Z입니다. – LDJ