JavaScript: calcolare il tempo trascorso a partire da una data per l'attributo datetime

In JavaScript possiamo calcolare la differenza temporale per l'attributo datetime dell'elemento time.

Si tratta in pratica di calcolare quanto tempo è trascorso dalla data espressa nell'attributo datetime alla data odierna.


'use strict';

const humanTimeDiff = value => {
    const date = Date.parse(value);

    if(isNaN(date)) {
        return '';
    }

    const now = new Date();
    let delta = parseInt((now.getTime() - date) / 1000, 10);

    delta = delta + (now.getTimezoneOffset() * 60);

    if(delta < 60) {
        return 'less than a minute ago';
    }
    if(delta < 120) {
        return 'about a minute ago';
    }
    if(delta < (60 * 60)) {
        return `${parseInt(delta / 60, 10).toString()} minutes ago`;
    }
    if(delta < (120 * 60)) {
        return 'about an hour ago';
    }
    if(delta < (24 * 60 * 60)) {
        return `about ${parseInt(delta / 3600, 10).toString()} hours ago`; 
    }
    if(delta < (48 * 60 * 60)) {
        return 'a day ago';
    }

    return `${parseInt(delta / 86400, 10).toString()} days ago`;

};

Esempio d'uso:


document.querySelectorAll('time[datetime]').forEach(time => {
    let value = time.getAttribute('datetime');
    console.log(humanTimeDiff(value));
});