• Jace's Blog
  • Posts
  • Converting dates and times to readable fuzzy versions

Converting dates and times to readable fuzzy versions

I am not sure where I got this, but I thought it could be useful. You know how some sites show "3d ago" instead of the YYYY-MM-DD hh:mm:ss version. Here's a small function that does that for you.

//debug lines
var yourUpdated = '2021-08-13T16:54:00Z';

let getFuzzyDate = function (dateTime) {
  var past = new Date(dateTime).getTime();//ms since epoch
  var now = new Date().getTime();//now
  var differenceInSeconds = (now - past) / 1000;//get seconds
  var thresholds = [
    {
      threshold: 60 - 1, 
      divideBy: 1,  
      fuzzyUnit: 's' 
    },
    {
      threshold: 60 * 60 - 1,
      divideBy: 60,
      fuzzyUnit: 'm'
    },
    {
      threshold: 24 * 60 * 60 - 1,
      divideBy: 60 * 60,
      fuzzyUnit: 'h'
    },
    {
      threshold: 30 * 24 * 60 * 60 - 1,
      divideBy:       24 * 60 * 60, 
      fuzzyUnit: 'd'
    },
    {
      threshold: 365 * 24 * 60 * 60 - 1,
      divideBy:  30 * 24 * 60 * 60,
      fuzzyUnit: 'mo'
    },
    {
      threshold: 100 * 365 * 24 * 60 * 60,
      divideBy: 365 * 24 * 60 * 60,
      fuzzyUnit: 'y'
    }
  ];
  var filtered = thresholds.filter((grouping) => {
    return differenceInSeconds < grouping.threshold;
  });
  return Math.round(differenceInSeconds / filtered[0].divideBy) + filtered[0].fuzzyUnit + ' ago';
}
console.log(getFuzzyDate(yourUpdated))

Reply

or to participate.