summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJozef Selesi <jozefs@users.sourceforge.net>2008-11-12 12:00:13 +0000
committerJozef Selesi <jozefs@users.sourceforge.net>2008-11-12 12:00:13 +0000
commita1ca946a89e00a2daa22069aabf60e7a1151e78b (patch)
tree760808c9c1a9ccbae377322f2f639fc5bca0d92b
parented8f1d4152d077529ac0f39d1aeb42186037e99f (diff)
Make comment post time display more user-friendly by displaying 'today', 'yesterday', 'x days ago' etc.
-rw-r--r--modules/comment/helpers/comment.php47
-rw-r--r--modules/comment/views/comment_list.html.php2
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>