diff options
Diffstat (limited to 'modules/comment')
-rw-r--r-- | modules/comment/helpers/comment.php | 46 | ||||
-rw-r--r-- | modules/comment/tests/Comment_Helper_Test.php | 16 |
2 files changed, 38 insertions, 24 deletions
diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php index 232f2584..9eed8451 100644 --- a/modules/comment/helpers/comment.php +++ b/modules/comment/helpers/comment.php @@ -24,6 +24,12 @@ * Note: by design, this class does not do any permission checking. */ class Comment_Core { + const SECONDS_IN_A_MINUTE = 60; + const SECONDS_IN_AN_HOUR = 3600; + const SECONDS_IN_A_DAY = 86400; + const SECONDS_IN_A_MONTH = 2629744; + const SECONDS_IN_A_YEAR = 31556926; + /** * Create a new photo. * @param string $author author's name @@ -76,45 +82,37 @@ class Comment_Core { * * @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; + $date_info_now = getdate($now); - $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); + /* Calculate the number of days, months and years elapsed since the specified timestamp. */ + $elapsed_days = round($time_difference / comment::SECONDS_IN_A_DAY); + $elapsed_months = round($time_difference / comment::SECONDS_IN_A_MONTH); + $elapsed_years = round($time_difference / comment::SECONDS_IN_A_YEAR); + $seconds_since_midnight = $date_info_now['hours'] * comment::SECONDS_IN_AN_HOUR + + $date_info_now['minutes'] * comment::SECONDS_IN_A_MINUTE + $date_info_now['seconds']; + /* Construct message depending on how much time passed. */ 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); + if ($time_difference < $seconds_since_midnight) { + $message = _('said today'); + } else if ($time_difference < $seconds_since_midnight + comment::SECONDS_IN_A_DAY) { + $message = _('said yesterday'); + } else { + $message = sprintf(_('said %d days ago'), $elapsed_days); + } } return $message; - } + } } diff --git a/modules/comment/tests/Comment_Helper_Test.php b/modules/comment/tests/Comment_Helper_Test.php index 2a112a7d..74f784b2 100644 --- a/modules/comment/tests/Comment_Helper_Test.php +++ b/modules/comment/tests/Comment_Helper_Test.php @@ -39,4 +39,20 @@ class Comment_Helper_Test extends Unit_Test_Case { $this->assert_equal($rand, $comment->item_id); $this->assert_true($comment->datetime > time() - 10 && $comment->datetime <= time()); } + + public function format_elapsed_time_test() { + /* This test could be improved by using random numbers and specifically testing corner cases. */ + $now = time(); + + $yesterday = $now - comment::SECONDS_IN_A_DAY; + $daysago = $now - 6 * comment::SECONDS_IN_A_DAY; + $monthsago = $now - 2 * comment::SECONDS_IN_A_MONTH; + $yearsago = $now - 5 * comment::SECONDS_IN_A_YEAR; + + $this->assert_equal('said today', comment::format_elapsed_time($now)); + $this->assert_equal('said yesterday', comment::format_elapsed_time($yesterday)); + $this->assert_equal('said 6 days ago', comment::format_elapsed_time($daysago)); + $this->assert_equal('said 2 months ago', comment::format_elapsed_time($monthsago)); + $this->assert_equal('said 5 years ago', comment::format_elapsed_time($yearsago)); + } } |