TimeAgo

by Santiago J

JavaScript

var seconds = 1e3;
var minutes = 60 * seconds;
var hours = 60 * minutes;
var days = 24 * hours;
var weeks = 7 * days;
var months = 30.4368 * days;
var years = 265 * days;

function interval(dt) {
    if (isNaN(dt)) return "unknown time";
    if (dt < seconds) {
        return "an instant";
    } else if (dt < minutes) {
        return (dt/seconds|0) + " seconds";
    } else if (dt < hours) {
        return (dt/minutes|0) + " minutes";
    } else if (dt < days) {
        return (dt/hours|0) + " hours";
    } else if (dt < months) {
        return (dt/days|0) + " days";
    } else if (dt < years) {
        return (dt/months|0) + " months";
    } else {
        return (dt/years|0) + " years"
    }
}

function timeAgo(date) {
    return interval(Date.now() - date) + " ago";
}


var dates = {
    now: new Date(Date.now()),
    secondsAgo: new Date(Date.now() - 5*seconds),
    minutesAgo: new Date(Date.now() - 15*minutes),
    hoursAgo: new Date(Date.now() - 2*hours),
    daysAgo: new Date(Date.now() - 2*days),
    weeksAgo: new Date(Date.now() - 2*weeks),
    monthsAgo: new Date(Date.now() - 2*months),
    yearsAgo: new Date(Date.now() - 2*years),
};

function println(s) {
    var line = document.createElement("div");
    line.textContent = s;
    document.body.appendChild(line);
}

println(timeAgo(dates.now));
println(timeAgo(dates.secondsAgo));
println(timeAgo(dates.minutesAgo));
println(timeAgo(dates.hoursAgo));
println(timeAgo(dates.daysAgo));
println(timeAgo(dates.weeksAgo));
println(timeAgo(dates.monthsAgo));
println(timeAgo(dates.yearsAgo));