我创建了一个逻辑应用程序,它使用get-item操作从SharePoint在线读取数据。
然而,我有一个类型为Date-Only的sharepoint-column,它显然只返回日期部分(正如Date-Only所暗示的那样)。
问题是,sharepoint内部使用date-time (UTC!)来存储日期。因此,当我在本地时间(CET!)中创建一个日期为"2016-10-20"的sharepoint条目时,它被存储为2016-10-19T22:00.00Z
。
所以现在logic-app-action正在发送一个rest调用,它将返回2016-10-19
。那我怎么才能找到原来的约会对象呢?即使我将响应视为UTC并将其转换为我的本地时间(使用azure函数),我也会得到2016-10-19T02:00.00
作为结果,而不是2016-10-20T02:00.00
在创建或更新条目时,SharePoint转换(基于站点Regional Settings
中选择的当前Time Zone
)并以协调世界时(UTC)保存日期时间值。SharePoint Online REST服务返回UTC格式的日期时间(除了Office 365中的其他服务,比如Outlook服务,它可以通过Prefer: outlook.timezone
头来控制,详见这里的例子)
先决条件
Moment.js图书馆
您需要转换来自REST响应的datetime值,以便在本地时间中显示它:
var orderDateString = "2016-10-19T22:00.00Z"; //relative datetime value in REST response
var offset = 120; //CET offset
var localOrderDate = moment.utc(orderDateString).utcOffset(offset);
console.log(localOrderDate.format('LL')); //print local date part
或者您可以使用以下函数将指定的DateTime值从协调世界时(UTC)转换为本地时间
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
。
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));
});