2016-11-03 2 views
0

Get-Itemアクションを使用してSharePoint Onlineからデータを読み取るロジックアプリケーションを作成しました。SharePoint Date-OnlyフィールドをUTCからローカルタイムゾーンに変換する方法

しかし、私はDate-Only型のsharepoint-columnを持っています。これは明示的に日付部分だけを返します(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が現地時間を保存しても、サーバがあなたのコードと異なるタイムゾーンを持っていたとしても、同じエラーが表示されます。 'DateTimeKind.UTC'で値を作成するには' ToUtc'を使い、あいまいさを避けるには 'DateTimeOffset'を使用してください –

+0

私はSPのサービスはISO8601(datetimeoffsetに相当)を使うと思います。 'DateTime'は' 2016-10-20T00:00:00 + 02:00'に変換されました - ISO8601形式の正しい現地時間 –

+0

私はSharePoint-UIのSharePointリスト項目を編集しています。これは論理的なアプリアクションからの応答です: "body":{ [簡略化のため簡略化...] "orderdate": "2016-10-19" } – nyn3x

答えて

3

が作成またはエントリのSharePoint変換を更新中の結果として2016-10-19T02:00.00になるだろう(Time Zone現在の選択に基づいて、サイト)を使用し、日時の値を協定世界時(UTC)で保存します。 SharePoint OnlineのRESTサービスは、(それがPrefer: outlook.timezoneヘッダを介して制御することができるOutlookのサービスのように、詳細については、例えばhereを参照、オフィス365内の別のサービスから離れて)UTCの日時を返し

前提

Moment.js

:ライブラリ

は、ローカル時間にそれを表示するために、REST応答から日時値を変換する必要があると述べました


はそれとも、現地時間

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(); 
    }); 
    } 
}; 

この機能は、SharePoint APIからSPTimeZone.LocalTimeToUTC methodに似ているに協定世界時(UTC)から指定されたDateTime値を変換する以下の機能を利用することができます。

使い方はあなたのコードはどこにあるの

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として格納されますが、応答ではtime-partは省略されます。しかし、戻り値はUTCに基づいています。これにより、応答に時間部分がない場合、他のタイムゾーンに変換することが不可能になります。私は今、sharepoint設定をdate *と* timeを含むように変更しました。 – nyn3x

関連する問題