如何将SharePoint Date-Only字段从UTC转换为本地时区

时间:2016-11-03 14:52:21

标签: rest azure sharepoint azure-logic-apps

我创建了一个逻辑应用程序,使用get-item操作在线从SharePoint读取数据。

但是 - 我有一个类型为Date-Only的sharepoint-column,它显然只返回日期部分(仅限日期)。

问题是,sharepoint内部使用日期时间(UTC!)来存储日期。因此,当我在当地时间(CET!)创建一个条目时,日期为" 2016-10-20"这存储为2016-10-19T22:00.00Z

所以现在逻辑应用操作正在发送一个休息调用,它将返回2016-10-19。那我该如何才能得到我原来的约会呢?即使我将响应视为UTC并将其转换为我当地时间(使用azure函数),我会得到2016-10-19T02:00.00而不是2016-10-20T02:00.00

1 个答案:

答案 0 :(得分:3)

创建或更新SharePoint转换的条目(基于站点Time Zone中选择的当前Regional Settings)并以协调世界时(UTC)保存日期时间值。 SharePoint Online REST服务以UTC格式返回日期时间(除了Office 365中的其他服务,例如可以通过Prefer: outlook.timezone标题控制的Outlook服务,有关详细信息,请参阅示例here

  

先决条件

     

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