Skip to content

Instantly share code, notes, and snippets.

@weyert
Created January 22, 2011 13:16
Show Gist options
  • Save weyert/791117 to your computer and use it in GitHub Desktop.
Save weyert/791117 to your computer and use it in GitHub Desktop.
Human readable timespans
define("SECOND", 1);
define("MINUTE", 60 * SECOND);
define("HOUR", 60 * MINUTE);
define("DAY", 24 * HOUR);
define("MONTH", 30 * DAY);
/**
* Returns the human readable timespan from now to a date/time
*/
function human_readable( $time ) {
$delta = abs( time( ) - $time );
if ( $delta < MINUTE ) {
return $delta == 1 ? "one second ago" : $delta . " seconds ago";
}
if ( $delta < 2 * MINUTE ) {
return "a minute ago";
}
if ( $delta < 45 * MINUTE ) {
return floor( $delta / MINUTE ) . " minutes ago";
}
if ( $delta < 90 * MINUTE ) {
return "an hour ago";
}
if ( $delta < 24 * HOUR ) {
return floor( $delta / HOUR ) . " hours ago";
}
if ( $delta < 48 * HOUR ) {
return "yesterday";
}
if ( $delta < 30 * DAY ) {
return floor( $delta / DAY ) . " days ago";
}
if ( $delta < 12 * MONTH ) {
$months = floor( $delta / DAY / 30 );
return $months <= 1 ? "one month ago" : $months . " months ago";
} else {
$years = floor( $delta / DAY / 365 );
return $years <= 1 ? "one year ago" : $years . " years ago";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment