function timeAgoInWords($datetime_string, $format = 'j/n/y', $backwards = false, $return = false) { $datetime = $this->fromString($datetime_string); $in_seconds = $datetime; if ($backwards) { $diff = $in_seconds - time(); } else { $diff = time() - $in_seconds; } $months = floor($diff / 2419200); $diff -= $months * 2419200; $weeks = floor($diff / 604800); $diff -= $weeks * 604800; $days = floor($diff / 86400); $diff -= $days * 86400; $hours = floor($diff / 3600); $diff -= $hours * 3600; $minutes = floor($diff / 60); $diff -= $minutes * 60; $seconds = $diff; if ($months > 0) { // over a month old, just show date (mm/dd/yyyy format) $relative_date = 'on ' . date($format, $in_seconds); $old = true; } else { $relative_date = ''; $old = false; if ($weeks > 0) { // weeks and days $relative_date .= ($relative_date ? ', ' : '') . $weeks . ' week' . ($weeks > 1 ? 's' : ''); $relative_date .= $days > 0 ? ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : '') : ''; } elseif ($days > 0) { // days and hours $relative_date .= ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : ''); $relative_date .= $hours > 0 ? ($relative_date ? ', ' : '') . $hours . ' hour' . ($hours > 1 ? 's' : '') : ''; } elseif ($hours > 0) { // hours and minutes $relative_date .= ($relative_date ? ', ' : '') . $hours . ' hour' . ($hours > 1 ? 's' : ''); $relative_date .= $minutes > 0 ? ($relative_date ? ', ' : '') . $minutes . ' minute' . ($minutes > 1 ? 's' : '') : ''; } elseif ($minutes > 0) { // minutes only $relative_date .= ($relative_date ? ', ' : '') . $minutes . ' minute' . ($minutes > 1 ? 's' : ''); } else { // seconds only $relative_date .= ($relative_date ? ', ' : '') . $seconds . ' second' . ($seconds != 1 ? 's' : ''); } }