Haga que una cadena de fecha se interprete de la misma manera en todos los navegadores

Entonces, tengo una fecha y hora ISO que regresa de mi servidor, como "2012-06-11T18: 05". Esta hora es en UTC. Cuando paso esa cadena a Chrome o IE, me dan la hora local (por lo tanto, para CDT da 01:05 p. m.) (que es lo que quiero). Si se lo paso a Firefox, asume que ya está en hora local, informa 6:05 PM en hora local. Entonces, pensé que agregaría que es hora UTC en la cadena, haciendo "2012-06-11T18: 05 + 0000", en su lugar. Esto funciona muy bien en Chrome y Firefox, pero IE lo informa como una fecha no válida.

¿Cuál es una forma compatible con los estándares de varios navegadores en la que puedo especificar que una cadena de fecha y hora determinada representa la hora UTC?

preguntado el 12 de junio de 12 a las 15:06

marcas de tiempo en milisegundos, ejemplo: 1339511550650 -

¿Cómo puedo conseguir eso? Estoy usando el convertidor NewtonSoft JSON en un objeto de fecha y hora. ¿Puedo hacer que me dé milisegundos? -

En javascript, puedes obtener eso con +new Date(). Luego puede reconstruirlo pasándolo como argumento -> new Date(x). ¿Qué estás usando en el servidor? -

Bueno, todavía lo necesito de la cadena de fecha que proviene de mi servidor. +nueva Fecha() solo me dará los milisegundos de ahora. -

Sí, depende de lo que esté ejecutando en el servidor. En PHP, por ejemplo, puedes hacer time() . "000" -

3 Respuestas

Si está buscando una buena biblioteca de citas, escribí momento.js para abordar problemas como este. También cuenta con análisis automático ISO8601.

moment("2012-06-11T18:05"); // parse as local time
moment("2012-06-11T18:05+0000"); // parse as utc time

Consulte la documentación en http://momentjs.com/docs/ para obtener más ejemplos de lo que puede hacer la biblioteca.

Respondido el 12 de junio de 12 a las 20:06

Se ve bien. Le daré a esta la respuesta aceptada, principalmente porque odio lo ilegible que es la expresión regular, y el tipo que me dio lo que funciona para mí (solo funciona para IE9) no lo publicó como respuesta. No creo que usemos el momento, solo porque este es el alcance de las cosas de la fecha que estamos haciendo, y ahora lo tengo funcionando. - Colin De Clue

Puede analizar los datos entrantes por su cuenta y utilizarlos para crear un objeto de fecha válido.

Algo como esto:

// input (from somewhere)
var incomingDate = "2012-06-11T18:05";
// parse Input using Regexp
var parsedIncomingDate= incomingDate.match(/^(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2})$/);
// convert parsed UTC times into ms accoring to the users browser timezone
var getUTCms = Date.UTC(parsedIncomingDate[1],parsedIncomingDate[2], parsedIncomingDate[3], parsedIncomingDate[4], parsedIncomingDate[5]); 

// ms to Date Object
var dateObj = new Date(getUTCms);

Respondido el 12 de junio de 12 a las 15:06

tienes que decrementar el mes en uno. Meses a partir de cero en objetos de fecha de JavaScript. - Ausi

Puede utilizar el Date.UTC Método como este:

var my_date = new Date(Date.UTC(2012, 5, 11, 18, 5, 0));

ver https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC

Respondido el 12 de junio de 12 a las 15:06

Esto no sería ideal porque tendría que analizar la cadena yo mismo. Esperaba no tener que hacer eso. - Colin De Clue

aquí developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… puede encontrar detalles para analizar cadenas de fecha. Pero como se describe allí: Las zonas horarias en las fechas ISO aún no son compatibles - Ausi

Debe usar la sintaxis de fecha RFC2822 / IETF para agregar información de zona horaria. - Ausi

Esto estaba ignorando el horario de verano, por alguna razón. - Colin De Clue

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.