diff --git a/tests/test_content.py b/tests/test_content.py index e0f0890..979f7a9 100644 --- a/tests/test_content.py +++ b/tests/test_content.py @@ -142,6 +142,27 @@ def test_content_humanize_timestamp(): assert Content.humanize_timestamp(timestamp, True) == '2 years ago' +def test_content_exact_timestamp(): + # Less than a year ago. + timestamp = time.time() - 60 * 60 + + # Calling datetime.strftime("%m-%d %H:%M") should always give a string of + # length 11 + assert len(Content.exact_timestamp(timestamp)) == 11 + + timestamp = time.time() - 60 * 60 * 24 * 31 * 12 * 2 + + # Similarly, calling datetime.strftime("%Y-%m-%d") should always give a + # string of length 10 + assert len(Content.exact_timestamp(timestamp)) == 10 + + # Does it break on a leap day? + from datetime import datetime + leapday = (datetime(2016, 2, 29) - datetime(1970, 1, 1)).total_seconds() + + Content.exact_timestamp(leapday) + + def test_content_wrap_text(): text = 'four score\nand seven\n\n' diff --git a/tuir/content.py b/tuir/content.py index 4f36413..d01b293 100644 --- a/tuir/content.py +++ b/tuir/content.py @@ -233,6 +233,7 @@ class Content(object): data['html'] = sub.selftext_html or '' data['created'] = cls.humanize_timestamp(sub.created_utc) data['created_long'] = cls.humanize_timestamp(sub.created_utc, True) + data['created_exact'] = cls.exact_timestamp(sub.created_utc) data['comments'] = sub.num_comments data['score'] = '{0}'.format('-' if sub.hide_score else sub.score) data['author'] = name @@ -253,9 +254,12 @@ class Content(object): cls.humanize_timestamp(sub.edited)) data['edited_long'] = '(edit {})'.format( cls.humanize_timestamp(sub.edited, True)) + data['edited_exact'] = '(edit {})'.format( + cls.exact_timestamp(sub.edited)) else: data['edited'] = '' data['edited_long'] = '' + data['edited_exact'] = '' if sub.url.split('/r/')[-1] == sub.permalink.split('/r/')[-1]: data['url'] = 'self.{0}'.format(data['subreddit']) @@ -398,6 +402,18 @@ class Content(object): else: return '%dyr' % years + @staticmethod + def exact_timestamp(utc_timestamp): + dt = datetime.fromtimestamp(utc_timestamp) + + # https://stackoverflow.com/a/765990 + yearsago = ((datetime.now() - dt).days / 365.2425) + + if yearsago > 0: + return dt.strftime("%Y-%m-%d") + else: + return dt.strftime("%m-%d %H:%M") + @staticmethod def wrap_text(text, width): """