Fecha incorrecta mostrada con Esri JavaScript API v.2.6

8

Estoy trabajando en un sitio que usa la versión 2.6 de la API Esri Javascript. Tengo una ventana de información que muestra información de la fecha, y la fecha está un día detrás de la fecha en la base de datos. Por ejemplo:

Si identifico una entidad en ArcMap, la fecha de devolución es el 15/08/2007. Cuando busco la misma característica a través del punto final Rest, obtengo 15/08/2007 00:00:00 UTC. Cuando identifico la función en la aplicación web, la fecha de devolución es el 8/14/2007.

En el código javascript estoy formateando la fecha de la siguiente manera:

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

¿Qué está causando esto y qué puedo hacer para que me devuelvan la fecha correcta?

Timothy Michael
fuente
<format dateformat = "shortDate" useutc = "true" />
Brad Nesom
Tuve el mismo problema con flex. Lo anterior me dio datos correctos.
Brad Nesom
1
@BradNesom flex! = JavaScript
Derek Swingley
@BradNesom Vi una publicación en el foro con eso ayer, pero las opciones de formato de hora son diferentes en JavaScript.
Timothy Michael

Respuestas:

7

Especifique local: true en su función de formato de fecha:

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

La respuesta de Mintx explica por qué necesita hacer esto. Puede encontrar más información sobre el formato de la ventana de información / contenido emergente en la ayuda: Formatear el contenido de la ventana de información .

Editar: use DateString, no DateFormat para especificar la opción local:

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

Edición 2: Gracias a las modificaciones, aquí está la respuesta publicada originalmente en mi Mintx que mencioné anteriormente:

Lo has entendido bien, solo necesitas cambiar el código para reflejar la zona horaria correcta. Dado que la función de la que está leyendo es una marca de tiempo UTC, el código JavaScript se está convirtiendo a su zona horaria, que (suponiendo que esté en los EE. UU.) Será de 4 a 7 horas antes de la medianoche del 15/08/2007, que es por qué regresa un día antes.

Edición 3: Creé una forma rápida y hacky de hacer esto con una función de formato personalizada: jsfiddle.net/yEkjm Probablemente haya una mejor manera de hacer esto ... No soy un experto en manejar fechas con JS.

Derek Swingley
fuente
Gracias Derek Puse local: true en la función de formato y todavía tengo fechas un día atrás. Verifiqué que tengo dojo.require ("dojo.date.locale"). ¿Hay algo más que necesite? Verifiqué que la configuración / código no se está almacenando en caché.
Timothy Michael
1
Ese es mi error, utilicé DateFormat en mi respuesta y debería ser DateString. He editado mi respuesta para mostrar la sintaxis correcta.
Derek Swingley
Intenté usar DateString más temprano hoy, pero necesito la fecha en formato mm / dd / aaaa, y DateString devuelve la fecha como "Mar 14 de agosto de 2007".
Timothy Michael
@Tim si desea un control detallado sobre el formato de fecha, volvemos a DateFormat. En mis pruebas, las características recuperadas de un servicio que almacena fechas como UTC se convierten automáticamente a la zona horaria del cliente cuando se muestran.
Derek Swingley
Gracias Derek Tienes razón, se están convirtiendo a mi zona horaria, es por eso que están un día antes. ¿Hay alguna manera de forzar que las fechas se devuelvan como UTC, ya que esa fecha es la correcta?
Timothy Michael