Desenvolvimento SharePoint

Retorno incorreto de campos DateTime em consulta REST no SharePoint

Olá Pessoal!

Recentemente identifiquei um problema quando precisei usar uma consulta REST em uma lista do SharePoint, porém nessa query iria utilizar o current DateTime para filtro de determinado range de período. Aí começou um problema…

Mas antes de nos aventurarmos no troubleshooting, seria interessante entendermos um pouco mais sobre o modelo de gravação de dados do tipo Date/ Time no content database.

A priori os dados são salvos sempre no formato UTC e considerando o meridiano de Greenwich (UTC-0):

Maiores detalhes: https://msdn.microsoft.com/en-us/library/hh656481(v=office.12).aspx

E é aí que a magia acontece… Dependendo das configurações regionais (e fuso) a nível de usuário, site e web application, o horário poderá ser exibido de maneira diferente como uma “máscara”, porém o dado salvo no content database SEMPRE será referente ao UTC-0 (e não ao UTC “regional”).

Outro fator importante que poderá ainda impactar o caso é o horário de verão, que também já detalhamos sua configuração para o SharePoint neste post!

 

Dadas todas as explicações técnicas, o que acontece mesmo com a query rest??

Ela não respeita as configurações regionais! Portanto se você está utilizando o “current DateTime” para obter dados de algum range de data, fique atento, pois o retorno dos campos do tipo DateTime em uma query rest sempre irá considerar o UTC-0!

 

Como resolver?

Simples! Para Javascript:

// http://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp
function getUtcFormat(oDate){
	var offset = new Date().getTimezoneOffset();
	return Date(oDate.setMinutes(oDate.getMinutes() + offset));
}

var myDate = new Date();
var myDateUtc = getUtcFormat(myDate);

console.log(myDate);
console.log(myDateUtc);

Para C#

System.TimeZone.CurrentTimeZone.ToLocalTime(date)

 

Espero que tenha ajudado e até o próximo post 😉