-
-
Save jonlabelle/7d306575cbbd34b154f87b1853d532cc to your computer and use it in GitHub Desktop.
python-relative-time
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime, timedelta | |
def relative_time(date): | |
"""Take a datetime and return its "age" as a string. | |
The age can be in second, minute, hour, day, month or year. Only the | |
biggest unit is considered, e.g. if it's 2 days and 3 hours, "2 days" will | |
be returned. | |
Make sure date is not in the future, or else it won't work. | |
Original Gist by 'zhangsen' @ https://gist.github.com/zhangsen/1199964 | |
""" | |
def formatn(n, s): | |
"""Add "s" if it's plural""" | |
if n == 1: | |
return "1 %s" % s | |
elif n > 1: | |
return "%d %ss" % (n, s) | |
def qnr(a, b): | |
"""Return quotient and remaining""" | |
return a / b, a % b | |
class FormatDelta: | |
def __init__(self, dt): | |
now = datetime.now() | |
delta = now - dt | |
self.day = delta.days | |
self.second = delta.seconds | |
self.year, self.day = qnr(self.day, 365) | |
self.month, self.day = qnr(self.day, 30) | |
self.hour, self.second = qnr(self.second, 3600) | |
self.minute, self.second = qnr(self.second, 60) | |
def format(self): | |
for period in ['year', 'month', 'day', 'hour', 'minute', 'second']: | |
n = getattr(self, period) | |
if n >= 1: | |
return '{0} ago'.format(formatn(n, period)) | |
return "just now" | |
return FormatDelta(date).format() | |
# | |
# EXAMPLES | |
# | |
just_now = relative_time(datetime.now()) # >>> just now | |
ten_years_ago = relative_time(datetime(2008, 9, 1)) # >>> 11 years ago | |
six_years_ago = relative_time(datetime.now() - timedelta(days=6)) # >>> 6 days ago | |
twenty_minutes = relative_time(datetime.now() - timedelta(minutes=20)) # >>> 20 minutes ago | |
print('') | |
print('just now............: {0}'.format(just_now)) | |
print('ten years ago.......: {0}'.format(ten_years_ago)) | |
print('six years ago.......: {0}'.format(six_years_ago)) | |
print('twenty minutes ago..: {0}'.format(twenty_minutes)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Gist updated... thanks @Scoder12!