Tengo la siguiente función que formatea la cadena de fecha.
import { format, parseISO } from "date-fns"; export function convertDate(myDate, displayFormat) { return format(new Date(parseISO(myDate)), displayFormat); }
Tengo artículos que tienen contenido como
title: 'My title' date: '2022-01-04'
Llamo a la función convertDate
usando a continuación:
if (articles) { for (let i = 0; i < articles.length; i++) { const year = convertDate(articles[i].date, "y"); years.push(year); } uniqueYear = [...new Set(years)]; }
Mi zona horaria es CEST.
Puedo llamar a la función usando {convertDate(article.date, "PPP")}
que también funciona.
¡Por favor ayuda!
Ejecutar el siguiente ejemplo mínimo en runkit.com devuelve "2022", no arroja el error descrito en el OP:
var dateFns = require("date-fns") function convertDate(myDate, displayFormat) { return dateFns.format(new Date(dateFns.parseISO(myDate)), displayFormat); } let articles = [{ title: 'My title', date: '2022-01-04' }]; convertDate(articles[0].date, "y"); // "2022"
Así que el error está en otra parte.
Además, el uso de la nueva Fecha es redundante:
dateFns.format(dateFns.parseISO(myDate), displayFormat)
es suficiente y más robusto.
Como se sugirió en otra parte, obtener el año de la marca de tiempo se puede hacer mediante la manipulación de cadenas, sin necesidad de convertir a Date . Para sacar los años:
let articles = [{title: 'title 0', date: '2022-01-04'}, {title: 'title 1', date: '2020-01-04'}]; let years = articles.map(o => o.date.substring(0,4)); console.log(years);
Si lo necesita como Fecha para otras cosas (por ejemplo, nombre de mes formateado), cámbielo a Fecha una vez y reutilícelo.