2016-11-03 5 views
0

get-item 작업을 사용하여 SharePoint 온라인에서 데이터를 읽는 논리 응용 프로그램을 만들었습니다.SharePoint 날짜 전용 필드를 UTC에서 현지 시간으로 변환하는 방법

그러나 필자는 Date-Only 형식의 sharepoint-column을 가지고 있는데, 이는 date-only 형식을 분명히 반환합니다 (date-only가 암시하는 것처럼).

문제는 SharePoint가 날짜를 저장하기 위해 내부적으로 날짜 - 시간 (UTC!)을 사용한다는 것입니다. 그래서 내 로컬 시간 (CET!)에 날짜 "2016-10-20"으로 sharepoint에 항목을 만들면 2016-10-19T22:00.00Z으로 저장됩니다.

이제 logic-app-action이 rest-call을 보내면 2016-10-19이 반환됩니다. 원래 날짜를 어떻게 내야합니까? 내가 (푸른 기능을 사용하여) UTC로 응답을 치료하고 내 로컬 시간으로 변환 할 경우에도 내가 대신 2016-10-20T02:00.00

+0

? 어떻게 날짜를 정하셨습니까? 대부분의 경우 서버가 저장하기 전에 변경해야하는 로컬 DateTime 값 (DateTimeKind.Local)을 보냈습니다. SP가 로컬 시간을 저장 했더라도 서버가 코드와 다른 시간대를 사용하는 경우에도 동일한 오류가 발생합니다. 'ToUtc'를 사용하여 'DateTimeKind.UTC'로 값을 만들거나'DateTimeOffset'을 사용하여 모호한 점을 피하십시오. –

+0

BTW SP의 서비스는 ISO8601 (datetimeoffset에 해당)을 사용합니다. 즉, 시간이 코드에 의해 수정되었다는 것을 의미합니다. 'DateTime'은 ISO8601 형식의 올바른 현지 시간 인'2016-10-20T00 : 00 : 00 + 02 : 00'로 변환되었습니다. –

+0

SharePoint-UI에서 SharePoint 목록 항목을 편집 중입니다. 논리 - 앱 - 액션에서 얻은 응답입니다. "body": { ... [간결성을 위해 ...] "orderdate": "2016-10-19" } – nyn3x

답변

3

만들거나 항목 셰어의 변환을 업데이트하는 동안의 결과로 2016-10-19T02:00.00을 얻을 것입니다 (Time Zone 현재의 선택에 따라 (Regional Settings)을 사용하고 datetime 값을 UTC (Coordinated Universal Time)로 저장합니다. 셰어 포인트 온라인 REST 서비스는 (은 Prefer: outlook.timezone 헤더를 통해 제어 할 수 아웃룩 서비스처럼 자세한 내용은 예를 here에 대한 참조, 오피스 365의 다른 서비스 차별화) UTC의 날짜를 반환

전제 조건

Moment.js

: 라이브러리

는 현지 시간을 표시하기 위해 REST 응답에서 날짜 값을 변환해야했다 가졌 428,


가 아니면 현지 시간

var TimeZoneUtilities = { 
    utcToLocalTime: function getSPCurrentTime(webUrl,value) { 
    return $.ajax({ 
     url: webUrl + "/_api/web/RegionalSettings/TimeZone", 
     method: "GET", 
     headers: { "Accept": "application/json; odata=verbose" } 
    }).then(function (data) { 
     var offset = -(data.d.Information.Bias + data.d.Information.StandardBias + data.d.Information.DaylightBias)/60.0; 
     return moment.utc(orderDateString).utcOffset(offset).toDate(); 
    }); 
    } 
}; 

이 기능은 셰어 API에서 SPTimeZone.LocalTimeToUTC method과 유사에 협정 세계시 (UTC)에서 지정된 날짜 시간 값을 변환하는 다음과 같은 기능을 활용할 수 있습니다.

사용하여 코드 어디

var orderDateString = "2016-10-19T22:00.00Z"; //UTC datetime value from REST response 
var orderDate = new Date(orderDateString); 
TimeZoneUtilities.utcToLocalTime(_spPageContextInfo.webAbsoluteUrl,orderDate) 
.done(function(value) 
{ 
    console.log("Server time: " + value.format("yyyy MM dd")); 
}) 
.fail(function(error){ 
    console.log(JSON.stringify(error)); 
}); 
+0

thx 멋진 답변 -하지만 내 문제는, 내가 필드를 셰어 포인트에 "날짜 전용"으로 구성했다는 것입니다. 날짜는 여전히 datetime으로 저장되지만 시간 부분은 응답에서 생략됩니다. 그러나 반환 된 값은 UTC를 기반으로합니다. 응답에 시간 부분이없는 경우 다른 시간대로 변환 할 수 없습니다.이제 sharepoint 구성을 date * 및 * 시간을 포함하도록 변경했습니다. – nyn3x