Búsqueda de sitios web

javascript - Comportamiento extraño de new Date(), devuelve el mes siguiente


Realmente agradecería tu ayuda y explicación.

Creé un método que devuelve todos los días del mes, estableciendo la fecha a partir de dos parámetros: el año y el mes:

private _getDaysOfMonth(year: number, month: number): Array<Date> {
    const date = new Date(year, month, 1)

    const days = []
    while (date.getMonth() === month) {
        days.push(date) 
        console.log(date) // works correctly, example: Fri Jan 01 2021 00:00:00 GMT+0300 (Moscow Standard Time)
        date.setDate( date.getDate() + 1 )
    }
   
    console.log(days) // I expect an array of days from January 1 to January 31, 2021, But I get February
    return days
}

Llamando al método con los parámetros 2021 y 0

this._getDaysOfMonth(this._year, this._month)

¡Y en lugar de un arreglo de días de enero, obtengo un arreglo de días de febrero!

Este es mi console.log console.log

Respuesta #1

new Date() para generar una nueva instancia de fecha cada vez que agregas un elemento:

function getDaysOfMonth (year, month) {
  const date = new Date(year, month)

  const days = []
  while (date.getMonth() === month) {
    days.push(new Date(date)) // new Date() to generate new date instance
    console.log(date)
    date.setDate(date.getDate() + 1)
  }

  console.log(days)
  return days
}

getDaysOfMonth(2021, 1)