Skip to content

Instantly share code, notes, and snippets.

@zacscott
Forked from CodeNegar/gist:3713606
Last active January 2, 2016 19:09
Show Gist options
  • Save zacscott/8348717 to your computer and use it in GitHub Desktop.
Save zacscott/8348717 to your computer and use it in GitHub Desktop.
Fuzzy/approx of a date in the past (php function).
<?php
/** Returns a fuzzy/approx of a date in the past. */
function fuzzyDate($date){
$time = strtotime($date);
$now = time();
$ago = $now - $time;
if ($ago < 60) {
$when = round($ago);
$s = ($when == 1) ? "second" : "seconds";
return "$when $s ago";
} elseif ($ago < 3600) {
$when = round($ago / 60);
$m = ($when == 1) ? "minute" : "minutes";
return "$when $m ago";
} elseif ($ago >= 3600 && $ago < 86400) {
$when = round($ago / 60 / 60);
$h = ($when == 1) ? "hour" : "hours";
return "$when $h ago";
} elseif ($ago >= 86400 && $ago < 2629743.83) {
$when = round($ago / 60 / 60 / 24);
$d = ($when == 1) ? "day" : "days";
return "$when $d ago";
} elseif ($ago >= 2629743.83 && $ago < 31556926) {
$when = round($ago / 60 / 60 / 24 / 30.4375);
$m = ($when == 1) ? "month" : "months";
return "$when $m ago";
} else {
$when = round($ago / 60 / 60 / 24 / 365);
$y = ($when == 1) ? "year" : "years";
return "$when $y ago";
}
}
/** Returns a fuzzy/approx of a date in the past. */
function lessFuzzyDate($date){
$time = strtotime($date);
$now = time();
$ago = $now - $time;
if ($ago < 60) {
return "Just now";
} elseif ($ago < 3600) {
$when = round($ago / 60);
$m = ($when == 1) ? "minute" : "minutes";
return "$when $m ago";
} elseif ($ago >= 3600 && $ago < 86400) {
$when = round($ago / 60 / 60);
$h = ($when == 1) ? "hour" : "hours";
return "$when $h ago";
} elseif ($ago >= 86400 && $ago < 2629743.83) {
$when = round($ago / 60 / 60 / 24);
$d = ($when == 1) ? "day" : "days";
return "$when $d ago";
} elseif ($ago < 31556926) {
return date('jS F', $time);
} else {
return date('jS F Y', $time);
}
}
echo fuzzyDate("2012-09-12 12:23:45")."<br />";
echo fuzzyDate("2012-09-13 05:25:45")."<br />";
echo fuzzyDate("2012-01-01 01:00:00")."<br />";
echo fuzzyDate("2001-05-30 00:00:00")."<br />";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment