Estoy actualizando el módulo date-fns de v1 a v2.
Este método auxiliar solía funcionar:
const { format, parseISO, differenceInSeconds } = require("date-fns"); const newDateNow = () => { const date = new Date(); return format(date, process.env.DATE_FORMAT); }; // `process.env.DATE_FORMAT` is set to `yyyy-MM-dd HH:mm:ss` console.log(ff) //prints: Thu Jul 21 2022 14:44:56 GMT+0200 (Central European Summer Time) console.log(gg) //prints: 3600 console.log(newDateNow()) //prints: 2022-07-21 15:32:05 const isExpired = () => { const exp = differenceInSeconds(newDateNow(), ff); return parseInt(gg) > exp; } Después de la actualización a la v2 del módulo, esto genera el error: date-fns doesn't accept strings as date arguments. Please use 'parseISO' to parse strings. Esto apunta a la línea const exp .
Así que cambio esa línea a:
const exp = differenceInSeconds(newDateNow(), parseISO(ff));Esto todavía genera el mismo error, así que lo cambio a:
const exp = differenceInSeconds(parseISO(newDateNow()), parseISO(ff)); Ahora no hay ningún error, pero console.log(exp) imprime NaN .
¿Cómo debo implementar esto? ¿No debería cambiar el método newDateNow para que no sea necesario usar parseISO() en newDateNow() ?
differenceInSeconds() es una función que toma dos objetos Date como argumentos. En su código, newDateNow() devuelve una cadena porque está llamando a format() en la fecha, por lo que le está pasando una cadena en lugar de una fecha.
Entonces, en función de la simple necesidad de comparar las dos fechas, debe omitir esa llamada a format() por completo.
Su ejemplo de código no incluye la asignación de ff , deberá asegurarse de que sea una fecha y no una cadena también.
Si aún no lo ha visto, la documentación es útil: https://date-fns.org/v2.28.0/docs/Getting-Started