year type only month javascript google-chrome date datetime firefox

javascript - only - input type month



new Date() funciona en Chrome pero no en Firefox (12)

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 cromo funciona perfectamente, ¿cuál sería la causa principal?


Opción 1 :

Supongamos que su cadena de tiempo tiene un formato que se ve así:

''2016-03-10 16:00:00.0''

En ese caso, podría hacer una expresión regular simple para convertirla a ISO 8601 :

''2016-03-10 16:00:00.0''.replace(/ /g,''T'')

Esto generaría el siguiente resultado:

''2016-03-10T16:00:00.0''

Este es el formato estándar de fecha y hora y, por lo tanto, es compatible con todos los navegadores:

document.body.innerHTML = new Date(''2016-03-10T16:00:00.0'') // THIS IS SAFE TO USE

Opcion 2 :

Supongamos que su cadena de tiempo tiene un formato que se ve así:

''02-24-2015 09:22:21 PM''

Aquí, puedes hacer la siguiente expresión regular:

''02-24-2015 09:22:21 PM''.replace(/-/g,''/'');

Esto también produce un formato compatible con todos los navegadores:

document.body.innerHTML = new Date(''02/24/2015 09:22:21 PM'') // THIS IS SAFE TO USE

Opción 3:

Supongamos que tiene una cadena de tiempo que no es fácil de ajustar a uno de los estándares bien respaldados.

En ese caso, lo mejor es dividir la cadena de tiempo en diferentes partes y usarlas como parámetros individuales para Date :

document.body.innerHTML = new Date(2016, 2, 26, 3, 24, 0); // THIS IS SAFE TO USE


De hecho, Chrome es más flexible para tratar con diferentes formatos de cadena. Incluso si no resuelve su formato de cadena, Chrome aún puede convertir String to Date sin errores. Me gusta esto:

var outputDate = new Date(Date.parse(inputString));

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 )

Una cadena que representa una fecha RFC2822 o ISO 8601 (se pueden usar otros formatos, pero los resultados pueden ser inesperados).

Entonces, cuando quiera usar Date.parse en Firefox y Safari, debe tener cuidado. Para mí, uso un truco para lidiar con eso. (Nota: puede no ser siempre correcto para todos los casos)

if (input.indexOf("UTC") != -1) { var tempInput = inputString.substr(0, 10) + "T" + inputString.substr(11, 8) + "Z"; date = new Date(Date.parse(tempInput)); }

Aquí convierte 2013-08-08 11:52:18 UTC a 2013-08-08T11: 52: 18Z primero, y luego su formato es palabras adecuadas en el documento de Firefox. En este momento, Date.parse siempre estará a la derecha en cualquier navegador.


En Firefox, cualquier Fecha no válida se devuelve como un objeto Fecha como Fecha 1899-11-29T19:00:00.000Z , por lo tanto, compruebe si el navegador es Firefox y luego obtenga el objeto Fecha de la cadena "1899-11-29T19:00:00.000Z".getDate() . Finalmente compáralo con la fecha.


Estaba teniendo un problema similar tanto en Firefox como en Safari cuando trabajaba con AngularJS. Por ejemplo, si una fecha devuelta por Angular se veía así:

2014-06-02 10:28:00

usando este código:

new Date(''2014-06-02 10:28:00'').toISOString();

devuelve un error de fecha no válida en Firefox y Safari. Sin embargo, en Chrome funciona bien. Como se indicó en otra respuesta, es probable que Chrome sea más flexible con las cadenas de fecha de análisis.

Mi objetivo final fue formatear la fecha de cierta manera. Encontré una excelente biblioteca que manejaba tanto el problema de compatibilidad de navegador cruzado como el formato de fecha. La biblioteca se llama moment.js .

Al utilizar esta biblioteca, el siguiente código funciona correctamente en todos los navegadores que probé:

moment(''2014-06-02 10:28:00'').format(''MMM d YY'')

Si está dispuesto a incluir esta biblioteca adicional en su aplicación, puede compilar más fácilmente su cadena de fecha y evitar posibles problemas de compatibilidad con el navegador. Como beneficio adicional, tendrá una buena manera de formatear, agregar, quitar, etc. fácilmente si es necesario.


Esto debería funcionar para usted:

var date1 = new Date(year, month, day, hour, minute, seconds);

Tuve que crear la fecha de una cadena, así que lo hice así:

var d = ''2013-07-20 16:57:27''; var date1 = new Date(d.substr(0, 4), d.substr(5, 2), d.substr(8, 2), d.substr(11, 2), d.substr(14, 2), d.substr(17, 2));

Recuerde que los meses en javascript son de 0 a 11, por lo que debe reducir el valor del mes en 1, así:

var d = ''2013-07-20 16:57:27''; var date1 = new Date(d.substr(0, 4), d.substr(5, 2) - 1, d.substr(8, 2), d.substr(11, 2), d.substr(14, 2), d.substr(17, 2));


Esto funciona en la mayoría de los navegadores también

new Date(''2001/01/31 12:00:00'')

Ese es el formato de

"yyyy/MM/dd HH:mm:ss"



He usado el formato de fecha siguiente y funciona en todos los navegadores.

var target_date = new Date("Jul 17, 2015 16:55:22").getTime(); var days, hours, minutes, seconds; var countdown = document.getElementById("countdown"); remaining = setInterval(function () { var current_date = new Date().getTime(); var seconds_left = (target_date - current_date) / 1000; days = parseInt(seconds_left / 86400); seconds_left = seconds_left % 86400; hours = parseInt(seconds_left / 3600); seconds_left = seconds_left % 3600; minutes = parseInt(seconds_left / 60); seconds = parseInt(seconds_left % 60); countdown.innerHTML = "<b>"+days + " day, " + hours + " hour, " + minutes + " minute, " + seconds + " second.</b>"; }, 1000);


No puede instanciar un objeto de fecha de la forma que desee. Tiene que ser de una manera específica. Aquí hay algunos ejemplos válidos:

new Date() // current date and time new Date(milliseconds) //milliseconds since 1970/01/01 new Date(dateString) new Date(year, month, day, hours, minutes, seconds, milliseconds)

o

d1 = new Date("October 13, 1975 11:13:00") d2 = new Date(79,5,24) d3 = new Date(79,5,24,11,33,0)

Chrome debe ser más flexible.

Fuente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

De los apsillers comentan:

la especificación EMCAScript requiere exactamente un formato de fecha (es decir, YYYY-MM-DDTHH: mm: ss.sssZ) pero los formatos de fecha personalizados pueden ser soportados libremente por una implementación : " Si la cadena no se ajusta a ese formato [ECMAScript-defined] 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 ".


Si aún desea crear una fecha usando guiones, puede usar este formato:

var date = new Date(''2013-08-31T17:00:00Z'')

Pero tenga en cuenta que crea tiempo de acuerdo con UTC. Es decir, si vives en la zona horaria GMT + 3 (3 horas antes de GMT), 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):

Sat Aug 31 2013 20:00:00 GMT+0300 (FLE Standard Time)

Asegúrese de agregar la letra ''Z'' al final, ya que de lo contrario, Chrome y Firefox analizarán la cadena de manera diferente (una agregará la compensación de tiempo y la otra no).


Solución simple, esto funciona con todos los navegadores,

var StringDate = "24-11-2017" var DateVar = StringDate.split("-"); var DateVal = new Date(DateVar[1] + "/" + DateVar[0] + "/" + DateVar[2]); alert(DateVal);


Una situación en la que me encontré fue cuando se trata de milisegundos. FF e IE no analizarán correctamente esta cadena de fecha cuando intenten crear una nueva fecha. "2014/11/24 17:38:20.177Z" No saben cómo manejar .177Z . Chrome funcionará sin embargo.