2011-01-18 32 views
5

Tengo un problema con la clase Ext Date que aparentemente devuelve la zona horaria incorrecta para una fecha analizada. Con el siguiente código se crea un objeto de fecha para el 24 de mayo de, 1966 15:46 BST:ExtJS fechas y zonas horarias

date = "1966-05-24T15:46:01+0100"; 
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false); 

Entonces llamo a esto:

console.log(pDate.getGMTOffset()); 

estoy esperando para conseguir el desplazamiento asociado con el orignal date de regreso (que es GMT + 1), pero en su lugar obtengo la zona horaria local del navegador. Si el navegador está configurado en una zona horaria lo suficientemente avanzada como GMT, la parte del día de la fecha también se transferirá (por lo que la fecha aparecerá el 25 de mayo de 1966).

¿Alguien sabe cómo evitar esto y hacer que Ext reconozca la zona horaria correcta de la fecha analizada en lugar de la zona horaria del navegador local?

Si esto no es posible, ¿se puede forzar a Ext a usar GMT en lugar de tratar de interpretar las zonas horarias?

Respuesta

6

Comprobé el parseDate() implementation in ExtJS source code y el documentation of Date in core JavaScript, el constructor de fecha() utilizado por ExtJS no admite la información de zona horaria. Los objetos JavaScript Date representan un valor UTC, sin la zona horaria. Durante el análisis en el código fuente de ExtJS, la zona horaria se pierde mientras que el desplazamiento correspondiente en minutos/segundos se agrega a la Fecha.

Luego verifiqué el source code of getGMTOffset() defined by ExtJS: construye una cadena de zona horaria utilizando la función getTimezoneOffset() definida en JavaScript.

Citando al documentation of getTimezoneOffset():

El desplazamiento de zona horaria es la diferencia entre la hora local y del meridiano de Greenwich (GMT). El horario de verano impide que este valor sea una constante .

La zona horaria no es una variable almacenada en la fecha, es un valor que varía según el período del año en que la fecha cae en.

En mi ordenador, con un entorno local francés ,

new Date(2010,1,20).getTimezoneOffset() 
// -60 
new Date(2010,9,20).getTimezoneOffset() 
// -120 

Editar: este comportamiento no es específico de la fecha de análisis en ExtJS, la nota siguiente en el documentation of Date.parse() on Mozilla Doc Center es relevante aquí también:

Tenga en cuenta que mientras que la zona horaria especificadores se utiliza durante la cadena de fecha a analizar interpretar adecuadamente el argumento, que no afectan el valor devuelto, que es siempre el número de milisegundos el 1 de enero, 1970 00:00:00 UTC y el punto en el tiempo representado por el argumento.

+2

Gracias, un montón de información útil allí. Para los futuros usuarios de Google que pasan por este hilo, logré resolver mi problema estableciendo todas las fechas a las 12.00 del mediodía, por lo que Ext no podría hacer que el día se volcara para sortear el problema original. No es perfecto, pero funciona lo suficientemente bien .... – TimS

0

Mis dos centavos, porque realmente no puedo poner todo mi tiempo a las 12:00 como lo hizo Tim.He publicado en el sencha forum

Cuestiones relacionadas