Burada PHP zaman önce benim çözümdür.
function ago($time = null) {
$date = ($time instanceof DateTime ? $time : new DateTime($time));
$diff = date_create('now', $date->getTimezone())->diff($date);
if ($diff->days === 0) {
$s = ($diff->days * 43200) + ($diff->h * 3600) + ($diff->i * 60) + $diff->s;
if ($s <= 4) return 'now';
if ($s <= 12) return 'few seconds ago';
if ($s <= 59) return $s . ' second' . ($diff->s > 1 ? 's' : null) . ' ago';
if ($s <= 75) return 'a minute ago';
if ($s > 1740 && $s < 1860) return 'half hour ago';
if ($s <= 3600) return ($diff->i > 1 ? $diff->i . ' minutes' : 'an hour') . ' ago';
if ($s > 3600) return ($diff->h > 1 ? $diff->h . ' hours' : 'an hour') . ($diff->i > 1 ? ' ' . $diff->i . ' minutes' : null) . ' ago';
}
if ($diff->days === 1 && $diff->h < 1) {
$h = ($diff->days * 24) + ($diff->h);
return $h . ' hour' . ($h > 1 ? 's' : null) . ($diff->i > 1 ? ' ' . $diff->i . ' minutes' : null) . ' ago';
}
if ($diff->days <= 25) return $diff->days . ' day' . ($diff->days > 1 ? 's' : null) . ($diff->h > 1 ? ' ' . $diff->h . ' hours' : ' and hour') . ' ago';
if ($diff->days <= 45) return 'a month ago';
if ($diff->days <= 345) return ($diff->m > 1 ? $diff->m . ' months' : 'an month') . ($diff->d > 1 ? ' ' . $diff->d . ' days' : null) . ' ago';
if ($diff->days <= 548) return 'a year ago';
if ($diff->days > 548) return $diff->y . ' years ago';
if ($diff->days > 365) return $diff->y . ' years ago';
}
Ve burada değerlerin bir örneğidir:
$dates = [
'now', // now
'-5 seconds', // few seconds ago
'-30 seconds', // 30 seconds ago
'-60 seconds', // a minute ago
'-29 minutes', // 29 minutes ago
'-30 minutes', // half hour ago
'-31 minutes', // 31 minutes ago
'-45 minutes', // 45 minutes ago
'-59 minutes', // 59 minutes ago
'-1 hour', // a hour ago
'-61 minutes', // an hour ago
'-75 minutes', // an hour 15 minutes ago
'-90 minutes', // an hour 30 minutes ago
'-12 hours', // 12 hours ago
'-24 hours 1 minutes', // 23 hours 59 minutes ago
'-24 hours', // 1 day and hour ago
'-25 hours', // 1 days ago
'-26 hours', // 1 day 2 hours ago
'-46 hours', // 1 day 22 hours ago
'-48 hours', // 2 days and hour ago
'-50 hours', // 2 days 2 hours ago
'-6 months', // 6 months ago
'-11 months', // 6 months ago
'-1 years', // a year ago
'-10 years', // 10 years ago
'-100 years', // 100 years ago
];
echo '<table>';
foreach ($dates as $date) {
echo '<tr><th>' . $date . '</th><td>' . ago(new DateTime($date)) . '</td></tr>';
}
echo '</table>';