Implementare una funzione JavaScript per calcolare il tempo trascorso da una data in formato umano può essere molto utile in diverse applicazioni. Questa funzione può essere utilizzata per mostrare quanto tempo è passato da un evento specifico, come ad esempio la pubblicazione di un post sui social media o l'aggiornamento di un prodotto nel tuo negozio online. In questo articolo, ti mostrerò come creare una funzione semplice ed efficace per calcolare il tempo trascorso in modo leggibile.
Prima di tutto, definiamo l'obiettivo della nostra funzione. Vogliamo che prenda in input una data nel formato JavaScript e restituisca il tempo trascorso rispetto alla data corrente in un formato umano comprensibile. Ad esempio, se la data in input è "2023-06-15", la funzione dovrebbe restituire una stringa come "2 settimane fa" o "1 mese fa".
Iniziamo scrivendo la nostra funzione:
function getElapsedTime(date) {
const currentDate = new Date();
const initialDate = new Date(date);
const timeDifferenceInMilliseconds = currentDate - initialDate;
const timeDifferenceInSeconds = Math.floor(timeDifferenceInMilliseconds / 1000);
const timeDifferenceInMinutes = Math.floor(timeDifferenceInSeconds / 60);
const timeDifferenceInHours = Math.floor(timeDifferenceInMinutes / 60);
const timeDifferenceInDays = Math.floor(timeDifferenceInHours / 24);
const timeDifferenceInWeeks = Math.floor(timeDifferenceInDays / 7);
const timeDifferenceInMonths = Math.floor(timeDifferenceInDays / 30);
const timeDifferenceInYears = Math.floor(timeDifferenceInDays / 365);
if (timeDifferenceInYears > 0) {
return `${timeDifferenceInYears} year${timeDifferenceInYears > 1 ? 's' : ''} ago`;
} else if (timeDifferenceInMonths > 0) {
return `${timeDifferenceInMonths} month${timeDifferenceInMonths > 1 ? 's' : ''} ago`;
} else if (timeDifferenceInWeeks > 0) {
return `${timeDifferenceInWeeks} week${timeDifferenceInWeeks > 1 ? 's' : ''} ago`;
} else if (timeDifferenceInDays > 0) {
return `${timeDifferenceInDays} day${timeDifferenceInDays > 1 ? 's' : ''} ago`;
} else if (timeDifferenceInHours > 0) {
return `${timeDifferenceInHours} hour${timeDifferenceInHours > 1 ? 's' : ''} ago`;
} else if (timeDifferenceInMinutes > 0) {
return `${timeDifferenceInMinutes} minute${timeDifferenceInMinutes > 1 ? 's' : ''} ago`;
} else {
return `${timeDifferenceInSeconds} second${timeDifferenceInSeconds > 1 ? 's' : ''} ago`;
}
}
Nella nostra funzione, otteniamo la data corrente utilizzando new Date(). Successivamente, creiamo un oggetto Date dalla data iniziale fornita come input. Calcoliamo quindi la differenza tra le due date in millisecondi utilizzando l'operatore sottrazione -.
Successivamente, convertiamo la differenza in millisecondi in secondi, minuti, ore, giorni, settimane, mesi e anni. Utilizziamo la funzione Math.floor per arrotondare il risultato all'intero inferiore più vicino. Questo ci permette di ottenere il tempo trascorso in numeri interi anziché decimali.
Infine, utilizziamo una serie di istruzioni if-else per determinare il formato corretto da restituire in base alla quantità di tempo trascorso. Se sono passati più di 365 giorni, restituiamo l'anno trascorso. Se sono passati più di 30 giorni, restituiamo il numero di mesi, e così via. Se nessuna delle condizioni precedenti è soddisfatta, restituiamo il numero di secondi trascorsi.
Ecco un esempio di come utilizzare la nostra funzione:
const initialDate = '2023-06-15';
const elapsed_time = getElapsedTime(initialDate);
console.log(elapsed_time); // Output: "2 weeks ago"
Con questa semplice funzione, puoi calcolare e visualizzare il tempo trascorso in modo leggibile da una data specifica. Puoi adattare ulteriormente la funzione per adattarsi alle tue esigenze specifiche, ad esempio modificando i formati di output o aggiungendo condizioni personalizzate.