Tengo fechas como esta:

2016-05-12T09:49:01.547Z
2016-05-09T11:18:57.006Z
2016-05-12T09:49:01.547Z

Estoy usando esta función:

function formatDate (date) {
  const dateObj = new Date()
  const y = dateObj.getFullYear()
  const m = dateObj.getMonth(date) + 1
  const d = dateObj.getDate(date)
  return y + '/' + m + '/' + d
}

De este modo:

Función buildingTemplate (building) {date: formatDate (building.updatedAt) isDirty: false}}

Para producir esto:

2016/5/12
2016/5/12
2016/5/12

Pero como puede ver, la fecha es siempre hoy, en lugar de las fechas a las que quiero convertir ese formato.

¿Por qué es esto?

-1
alex 12 may. 2016 a las 13:44

3 respuestas

La mejor respuesta

Cambiar la función de la siguiente manera

function formatDate(date) {
  const dateObj = new Date(date);
  const y = dateObj.getFullYear();
  const m = dateObj.getMonth() + 1;
  const d = dateObj.getDate();
  return y + '/' + m + '/' + d;
}
1
kannanfa 12 may. 2016 a las 10:52

Ignoras totalmente el argumento pasado date. Póngalo en el constructor de objetos Date:

const dateObj = new Date(date);

Si crea un objeto new Date(date) sin ningún argumento, obtendrá la fecha actual, es por eso que obtuvo el triple 2016/5/12.

1
hsz 12 may. 2016 a las 10:47

Has utilizado date de manera incorrecta. Su función debería verse así:

function formatDate (date) {
    const dateObj = new Date(date)
    const y = dateObj.getFullYear()
    const m = dateObj.getMonth() + 1
    const d = dateObj.getDate()
    return y + '/' + m + '/' + d
}

Además, quiero sugerirle http://momentjs.com/ biblioteca, que es una biblioteca estándar para trabajar con fechas. Tiene gran API y pequeño tamaño.

1
steppefox 12 may. 2016 a las 10:51