Hay varias cosas locas que suceden con un objeto JS DATE que convierte cadenas, por ejemplo, considere la siguiente fecha que proporcionó
Nota: Los siguientes ejemplos pueden o no ser UN DÍA DE DESCUENTO dependiendo de SU zona horaria y hora actual.
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Sin embargo, si reorganizamos el formato de cadena a Mes-Día-Año ...
new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Otro extraño
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Podríamos cambiar fácilmente los guiones en su fecha "2011-09-24" al hacer una nueva fecha
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
¿Qué pasaría si tuviéramos una cadena de fecha como "2011-09-24T00: 00: 00"?
new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Ahora cambie el guión a barra diagonal como antes; ¿lo que pasa?
new Date("2011/09/24T00:00:00");
// => Invalid Date
Normalmente tengo que administrar el formato de fecha 2011-09-24T00: 00: 00, así que esto es lo que hago.
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
ACTUALIZAR
Si proporciona argumentos separados para el constructor Fecha, puede obtener otras salidas útiles como se describe a continuación
Nota: los argumentos pueden ser de tipo Número o Cadena. Mostraré ejemplos con valores mixtos.
Obtenga el primer mes y día de un año determinado
new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
Obtenga el último mes y día del año
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
Ejemplo de número, argumentos de cadena. Tenga en cuenta que el mes es marzo porque de nuevo los meses basados en cero.
new Date(2011, "02");
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
Si hacemos lo mismo pero con un día de cero, obtenemos algo diferente.
new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
Agregar un día cero a cualquier argumento de año y mes obtendrá el último día del mes anterior. Si continúa con números negativos, puede continuar retrocediendo otro día
new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)