Digamos que tengo que convertir esta cadena en un objeto Date de Javascript con esta línea:
new Date('2001-01-31 02:00:00 pm')En Chrome está bien. Pero en Firefox, muestra una fecha no válida. ¿Porqué es eso? Lo manejé manualmente, analicé la parte Hora y agregué 12 horas cuando fue necesario. Pero, ¿hay alguna otra forma de convertir esto?
Creo que el problema al que te enfrentas tiene que ver con las diferencias entre los navegadores basados en Chromium y el Firefox basado en Gecko. Por lo tanto, manejan su cuerda de manera un poco diferente entre sí. En cuanto a convertir una cadena en un objeto Date, la única forma que se me ocurre es analizándola, es decir, pasándola al constructor de Date (como lo ha hecho).
Así es como resolvería este problema para que funcione en todos los navegadores (usando los métodos integrados dentro del objeto Date).
const myDate = new Date(); myDate.setFullYear(2001); myDate.setUTCMonth(0); myDate.setUTCDate(31); myDate.setUTCHours(0); myDate.setUTCMinutes(0); myDate.setUTCSeconds(0); myDate.setUTCMilliseconds(0); console.log(myDate); // 2001-01-31T02:00:00.000Z // Now add a year: const oldYear = myDate.getFullYear(); myDate.setFullYear(oldYear + 1); // Results: console.log("Expected result: year is 2002"); console.log(myDate); // Year is 2001 + 1 = 2002Por supuesto, en su caso de uso, es posible que desee agregar horas, meses o cualquier otra cantidad de tiempo, para que pueda adaptarse en consecuencia.