Estoy creando una cadena de fecha y hora que se ve así: 2010-07-15 11:54:21
Y con el siguiente código obtengo una fecha no válida en Firefox pero funciona bien en Chrome
var todayDateTime = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + seconds;
var date1 = new Date(todayDateTime);
En firefox date1 me da una fecha no válida, pero en Chrome funciona bien, ¿cuál sería la causa principal?
javascript
google-chrome
date
datetime
firefox
pixeldev
fuente
fuente
Respuestas:
No puede crear una instancia de un objeto de fecha de la forma que desee. Tiene que ser de una manera específica. A continuación se muestran algunos ejemplos válidos:
o
Chrome debe ser más flexible.
Fuente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Del comentario de apsillers :
la especificación EMCAScript requiere exactamente un formato de fecha (es decir, AAAA-MM-DDTHH: mm: ss.sssZ) pero los formatos de fecha personalizados pueden ser admitidos libremente por una implementación : " Si la cadena no se ajusta a ese formato [definido por ECMAScript] la función puede recurrir a heurísticas específicas de implementación o formatos de fecha específicos de implementación " . Chrome y FF simplemente tienen diferentes" formatos de fecha específicos de implementación ".
fuente
YYYY-MM-DDTHH:mm:ss.sssZ
) pero los formatos de fecha personalizados pueden ser admitidos libremente por una implementación : " Si la cadena no se ajusta a ese formato [definido por ECMAScript], la función puede recurrir a cualquier heurística específica de implementación o formatos de fecha específicos de implementación " . Chrome y FF simplemente tienen diferentes" formatos de fecha específicos de implementación ".Esto funciona en todos los navegadores:
Formato: AAAA-MM-DDTHH: mm: ss.sss
Detalles: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
fuente
Opción 1 :
Suponga que su cadena de tiempo tiene un formato similar a este:
En ese caso, puede hacer una expresión regular simple para convertirla a
ISO 8601
:Esto produciría el siguiente resultado:
Este es el formato estándar de fecha y hora y, por lo tanto, es compatible con todos los navegadores:
Opcion 2 :
Suponga que su cadena de tiempo tiene un formato similar a este:
Aquí, puede hacer la siguiente expresión regular:
Esto también produce un formato compatible con todos los navegadores:
Opcion 3:
Suponga que tiene una cadena de tiempo que no es fácil de ajustar a uno de los estándares bien soportados.
En ese caso, es mejor dividir su cadena de tiempo en diferentes partes y usarlas como parámetros individuales para
Date
:fuente
Esto también funciona en la mayoría de los navegadores.
Ese es el formato de
fuente
Si aún desea crear la fecha usando guiones, puede usar este formato:
Pero tenga en cuenta que crea la hora según UTC. Es decir, si vive en la zona horaria GMT + 3 (3 horas antes de GMT), se agregará este desplazamiento de zona horaria a la hora. Entonces, el ejemplo anterior tendrá este valor, si GMT + 3 (tenga en cuenta que son las 20:00 y no las 17:00):
Asegúrese de agregar la letra 'Z' al final, porque de lo contrario, Chrome y Firefox analizarán la cadena de manera diferente (una agregará compensación de tiempo y la otra no).
fuente
Tenía un problema similar en Firefox y Safari cuando trabajaba con AngularJS. Por ejemplo, si una fecha devuelta de Angular se ve así:
usando este código:
devuelve un error de fecha no válida en Firefox y Safari. Sin embargo, en Chrome funciona bien. Como se indicó en otra respuesta, lo más probable es que Chrome sea más flexible con el análisis de cadenas de fecha.
Mi objetivo final era formatear la fecha de cierta manera. Encontré una biblioteca excelente que manejó tanto el problema de compatibilidad entre navegadores como el problema de formato de fecha. La biblioteca se llama moment.js .
Al usar esta biblioteca, el siguiente código funciona correctamente en todos los navegadores que probé:
Si está dispuesto a incluir esta biblioteca adicional en su aplicación, puede crear más fácilmente su cadena de fecha y evitar posibles problemas de compatibilidad del navegador. Como beneficio adicional, tendrá una buena manera de formatear, sumar, restar, etc. fechas fácilmente si es necesario.
fuente
Esto debería funcionar para ti:
Tuve que crear una fecha en una cadena, así que lo hice así:
Recuerde que los meses en javascript son de 0 a 11, por lo que debe reducir el valor del mes en 1, así:
fuente
Solución simple, esto funciona con todos los navegadores,
fuente
Una situación con la que me he encontrado fue cuando estaba tratando con milisegundos. FF e IE no analizarán esta cadena de fecha correctamente al intentar crear una nueva fecha.
"2014/11/24 17:38:20.177Z"
No saben cómo manejar.177Z
. Sin embargo, Chrome funcionará.fuente
De hecho, Chrome es más flexible para trabajar con diferentes formatos de cadena. Incluso si no averigua su formato de cadena, Chrome aún puede convertir con éxito la cadena en fecha sin errores. Me gusta esto:
Pero para Firefox y Safari, las cosas se vuelven más complejas. De hecho, en el documento de Firefox, ya dice: ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse )
Entonces, cuando desee utilizar Date.parse en Firefox y Safari, debe tener cuidado. Para mí, utilizo un método de truco para lidiar con eso. (Nota: puede que no siempre sea correcto para todos los casos)
Aquí convierte primero 2013-08-08 11:52:18 UTC a 2013-08-08T11: 52: 18Z , y luego su formato se ajusta a las palabras del documento de Firefox. En este momento, Date.parse siempre estará a la derecha en cualquier navegador.
fuente
Esto es en lo que funcionó para mí
Firefox
yChrome
:Buena suerte...
fuente
En Firefox, cualquier Fecha no válida se devuelve como un objeto Fecha como Fecha
1899-11-29T19:00:00.000Z
, por lo tanto, verifique si el navegador es Firefox y luego obtenga el objeto Fecha de la cadena"1899-11-29T19:00:00.000Z".getDate()
. Finalmente compárelo con la fecha.fuente
He utilizado el siguiente formato de fecha y funciona en todos los navegadores.
fuente