timeago.js


export const TIME_AGO = {
  prefix: "",
  suffix: " ago",
  seconds: "less than a minute",
  minute: "about a minute",
  minutes: "%d minutes",
  hour: "about an hour",
  hours: "about %d hours",
  day: "a day",
  days: "%d days",
  month: "about a month",
  months: "%d months",
  year: "about a year",
  years: "%d years"
};

export function template(t, n) {
  n = Math.abs(Math.round(n));
  return TIME_AGO[t] &&
    TIME_AGO[t].replace(/%d/i, n);
};

/**
 * timeago
 * @param {Date} date
 * @return {String}
 */
export function timeago(date) {
  const diff = new Date - date;
  const seconds = diff / 1000;
  const minutes = seconds / 60;
  const hours = minutes / 60;
  const days = hours / 24;
  const months = days / 30;
  const years = days / 365;
  return TIME_AGO.prefix + (
    seconds < 45 && template('seconds', seconds) ||
    seconds < 90 && template('minute', 1) ||
    minutes < 45 && template('minutes', minutes) ||
    minutes < 90 && template('hour', 1) ||
    hours < 24 && template('hours', hours) ||
    hours < 42 && template('day', 1) ||
    days < 30 && template('days', days) ||
    days < 45 && template('month', 1) ||
    days < 365 && template('months', months) ||
    years < 1.5 && template('year', 1) ||
    template('years', years)
  ) + TIME_AGO.suffix;
};