Doy 2022-03-12T22:57:20.734546Z como argumento de fecha. Doy la fecha y hora como entrada y luego compruebo las condiciones de uso y regreso foo seconds ago foo mins ago etc. pero obtengo una salida 20 seconds ago y no se actualiza.
const convertDate = (date: string) => { let d = moment(date).seconds(); let min = d / 60; let hours = d / 3600 let day = d / 86400 let month = day / 30 let year = month / 12 if (min <= 60) { return `${min} min(s) ago` } else if (hours <= 60) { return `${hours} hour(s) ago` } else if (day <= 30) { return `${day} day(s) ago` } else if (month <= 30) { return `${month} month(s) ago` } else if (year <= 365 ) { return `${year} year(s) ago` } else { return `${d} second(s) ago` } }Puede calcular los segundos anteriores comparándolos con la fecha actual como en el ejemplo a continuación.
Demostración de Stackblitz en funcionamiento
A partir de hoy, ya no se necesita el momento y puede usar javascript puro para convertir una cadena en un objeto de fecha. Fuente: documentación de Momentjs o consulte este artículo
Moment se creó para la era anterior del ecosistema de JavaScript. La web moderna se ve muy diferente en estos días.
const convertDate = (date: string) => { let current_date = new Date().getTime(); let d = (current_date - new Date(date).getTime()) / 1000; let min = Math.round(d / 60); if (min <= 60) { return `${min} min(s) ago`; } let hours = Math.round(d / 3600); if (hours <= 60) { return `${hours} hour(s) ago`; } let day = Math.round(d / 86400); if (day <= 30) { return `${day} day(s) ago`; } let month = Math.round(day / 30); if (month <= 30) { return `${month} month(s) ago`; } let year = Math.round(month / 12); if (year <= 365) { return `${year} year(s) ago`; } return `${d} second(s) ago`; }; moment(date).fromNow(); // 4 years ago moment(date).fromNow(true); // 4 years