Data incorreta exibida com a API JavaScript do Esri v.2.6

8

Estou trabalhando em um site que está usando a versão 2.6 da API Javascript da Esri. Eu tenho uma janela de informações que exibe algumas informações de data e a data está um dia atrás da data no banco de dados. Por exemplo:

Se eu identificar um recurso no ArcMap, a data retornada é 15/8/2007. Quando eu procuro o mesmo recurso pelo ponto de extremidade Rest, recebo 15/08/2007 00:00:00 UTC. Quando identifico o recurso no aplicativo Web, a data retornada é 14/8/2007.

No código javascript, estou formatando a data da seguinte maneira:

${SALEDT:DateFormat(selector: 'date', fullYear: true)}

O que está causando isso e o que posso fazer para que a data correta seja retornada?

Timothy Michael
fonte
<formato dateformat = "shortDate" useutc = "true" />
Brad Nesom
Eu tive o mesmo problema com o flex. O texto acima me forneceu dados corretos.
23412 Brad Nesom
1
@BradNesom flex! = JavaScript
Derek Swingley
@BradNesom Vi um post no fórum com isso ontem, mas as opções de formatação de hora são diferentes em javascript.
Timothy Michael

Respostas:

7

Especifique local: true na sua função de formatação de data:

${SALEDT:DateFormat(selector: 'date', local: true, fullYear: true)}

A resposta da Mintx explica por que você precisa fazer isso. Mais informações sobre como formatar o conteúdo da janela de informações / pop-up estão disponíveis na ajuda: Formatar o conteúdo da janela de informações .

Editar: use DateString, não DateFormat para especificar a opção local:

${SALEDT:DateString(local: true, hideTime: true)}

Edit 2: Graças aos mods, aqui está a resposta originalmente postada no meu Mintx que referenciei acima:

Você acertou na maior parte do tempo, basta alterar o código para refletir o fuso horário correto. Como o recurso do qual você está lendo é um carimbo de data / hora UTC, o código JavaScript está sendo convertido para o seu fuso horário, que (supondo que você esteja nos EUA) será de 4 a 7 horas antes da meia-noite de 15/8/2007, que é por que está voltando um dia antes.

Edit 3: Criei uma maneira rápida e hacky de fazer isso com uma função de formatação personalizada: jsfiddle.net/yEkjm Provavelmente, existe uma maneira melhor de fazer isso ... Não sou especialista em lidar com datas com JS.

Derek Swingley
fonte
Obrigado Derek. Coloquei local: true na função de formatação e ainda estou recebendo datas um dia atrás. Eu verifiquei que tenho dojo.require ("dojo.date.locale") - há mais alguma coisa que eu precise? Eu verifiquei que a configuração / código não está sendo armazenada em cache.
Timothy Michael
1
Esse é o meu erro, usei DateFormat na minha resposta e deve ser DateString. Editei minha resposta para mostrar a sintaxe correta.
Derek Swingley
Tentei usar o DateString hoje cedo, mas preciso da data no formato mm / dd / aaaa e o DateString retorna a data como "Ter 14 de agosto de 2007".
Timothy Michael
@ Tim, se você quiser um controle refinado sobre o formato da data, voltaremos ao DateFormat. Nos meus testes, os recursos recuperados de um serviço que armazena datas como UTC são convertidos automaticamente para o fuso horário do cliente quando exibidos.
Derek Swingley
Obrigado Derek. Você está certo, eles estão sendo convertidos para o meu fuso horário - é por isso que um dia antes. Existe uma maneira de forçar as datas a serem retornadas como UTC, pois essa data é a correta?
Timothy Michael