Tuesday 2 June 2015

Pretty / Fuzzy Date

<?php
function prettyDate($ts) {
 $s = date("m.d.Y", $ts);
 $now = time();
 
 if ($now > $ts) {
  $diff = round($now-$ts);
  $numMins = round($diff/60);
  $numHours = round($numMins/60);
  $numDays = round($numHours/24);
  $numWeeks = round($numDays/7);
  $numMonths = round($numWeeks/4.33);
  $numYears = round($numMonths/12);
  
  if (($diff < 60) || ($numMins <= 1)) {
   $s = "1 minute ago";
  } elseif ($numHours == 0) {
   $s = $numMins . " minutes ago";
  } elseif ($numDays == 0) {
   if ($numHours > 1) {
    $s = $numHours . " hours ago";
   } else {
    $s = "1 hour ago";
   }
  } elseif ($numWeeks == 0) {
   if ($numDays > 1) {
    $s = $numDays . " days ago";
   } else {
    $s = "Yesterday";
   }
  } elseif ($numMonths == 0) {
   if ($numWeeks > 1) {
    $s = $numWeeks . " weeks ago";
   } else {
    $s = "Last week";
   }
  } else {
   if ($numMonths > 1) {
    $s = $numMonths . " months ago";
   } elseif ($numMonths <= 3) {
    $s = $numMonths .= " months ago";
   } else {
    $s = "Over 3 months ago";
   }
  }
 } else {
  $diff = ($ts - $now);
  $numMins = ($diff/60);
  $numHours = round($numMins/60);
  $numDays = round($numHours/24);
  $numWeeks = round($numDays/7);
  $numMonths = round($numWeeks/4.33);
  $numYears = round($numMonths/12);
  
  if ($numDays == 0) {
   $s = "Today";
  } elseif ($numDays == 1) {
   $s = "Tomorrow";
  } elseif ($numWeeks == 0) {
   $s = $numDays . " days";
  } elseif ($numWeeks == 1) {
   $s = "Next Week";
  } elseif ($numMonths == 0) {
   $s = $numWeeks . " weeks";
  } elseif ($numMonths == 1) {
   $s = "Next Month";
  } elseif ($numYears <= 0) {
   $s = $numMonths . " months";
  } elseif ($numYears == 1) {
   $s = "Next Year";
  } else {
   $s = "Over a year";
  }
 }
 
 return $s;
}
?>
 

Usage

just pass a standard unix timestamp to the function and echo the return value to show textual dates (eg: Yesterday, 3 hours ago, Last week, Tomorrow)
 

0 comments:

Post a Comment