diff options
-rw-r--r-- | modules/comment/helpers/comment.php | 47 | ||||
-rw-r--r-- | modules/comment/views/comment_list.html.php | 2 |
2 files changed, 48 insertions, 1 deletions
diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php index 1c454952..232f2584 100644 --- a/modules/comment/helpers/comment.php +++ b/modules/comment/helpers/comment.php @@ -69,5 +69,52 @@ class Comment_Core { $v->item_id = $item_id; return $v; } + + /** + * Format a human-friendly message showing the amount of time elapsed since the specified + * timestamp (e.g. 'said today', 'said yesterday', 'said 13 days ago', 'said 5 months ago'). + * + * @todo Take into account the viewer's time zone. + * @todo Properly pluralize strings. + * @todo Write test once we settle on the final forms of the messages. + * + * @param integer $timestamp Unix format timestamp to compare with + * @return string user-friendly string containing the amount of time passed + */ + static function format_elapsed_time($timestamp) { + $now = time(); + $date_info_comment = getdate($timestamp); + $date_info_now = getdate($now); + + /* Check if the comment was posted today or yesterday. */ + if ($date_info_comment['year'] == $date_info_now['year'] + && $date_info_comment['mon'] == $date_info_now['mon']) { + if ($date_info_comment['mday'] == $date_info_now['mday']) { + $message = _('said today'); + } else if ($date_info_comment['mday'] == $date_info_now['mday'] - 1) { + $message = _('said yesterday'); + } + return $message; + } + + /* Calculate the number of days, months or years elapsed since the specified timestamp. */ + $seconds_in_a_day = 86400; + $seconds_in_a_month = 2629744; + $seconds_in_a_year = 31556926; + $time_difference = $now - $timestamp; + + $elapsed_days = round($time_difference / $seconds_in_a_day); + $elapsed_months = round($time_difference / $seconds_in_a_month); + $elapsed_years = round($time_difference / $seconds_in_a_year); + + if ($elapsed_years > 0) { + $message = sprintf(_('said %d years ago'), $elapsed_years); + } else if ($elapsed_months > 0) { + $message = sprintf(_('said %d months ago'), $elapsed_months); + } else { + $message = sprintf(_('said %d days ago'), $elapsed_days); + } + return $message; + } } diff --git a/modules/comment/views/comment_list.html.php b/modules/comment/views/comment_list.html.php index ffd64c0c..1545a106 100644 --- a/modules/comment/views/comment_list.html.php +++ b/modules/comment/views/comment_list.html.php @@ -4,7 +4,7 @@ <li id="gComment-<?= $index; ?>" class="gComment <?= $index % 2 ? 'odd' : 'even' ?>"> <p> <a href="#" class="gAuthor"><?= $comment->author ?></a> - said <?= round((time() - $comment->datetime)/60) ?> minutes ago + <?= comment::format_elapsed_time($comment->datetime) ?>, <span class="understate"><?= strftime('%c', $comment->datetime) ?></span> </p> <div> |