summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-04-22 12:02:47 +0000
committerJannis Leidel <jannis@leidel.info>2011-04-22 12:02:47 +0000
commitea248f0107eb3bed5a4a0fb65d6065e5691bea0a (patch)
tree2dc84a3a295d575427806b2cddcdbbf8c5290e83 /django
parent8b588747ed302fcdef0b79171ed3cf129cd32a38 (diff)
Fixed #12771 -- Added naturaltime filter to humanize contrib app. Thanks, phinpho, djansoft and xtrqt.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16071 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/humanize/templatetags/humanize.py36
1 files changed, 34 insertions, 2 deletions
diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py
index cfa93fe534..0c6d389e34 100644
--- a/django/contrib/humanize/templatetags/humanize.py
+++ b/django/contrib/humanize/templatetags/humanize.py
@@ -2,7 +2,7 @@ from django.utils.translation import ungettext, ugettext as _
from django.utils.encoding import force_unicode
from django import template
from django.template import defaultfilters
-from datetime import date
+from datetime import date, datetime
import re
register = template.Library()
@@ -83,7 +83,7 @@ def naturalday(value, arg=None):
present day returns representing string. Otherwise, returns a string
formatted according to settings.DATE_FORMAT.
"""
- try:
+ try:
value = date(value.year, value.month, value.day)
except AttributeError:
# Passed value wasn't a date object
@@ -100,3 +100,35 @@ def naturalday(value, arg=None):
return _(u'yesterday')
return defaultfilters.date(value, arg)
register.filter(naturalday)
+
+def naturaltime(value, arg=None):
+ """
+ For date and time values shows how many seconds, minutes or hours ago compared to
+ current timestamp returns representing string. Otherwise, returns a string
+ formatted according to settings.DATE_FORMAT
+ """
+ try:
+ value = datetime(value.year, value.month, value.day, value.hour, value.minute, value.second)
+ except AttributeError:
+ return value
+ except ValueError:
+ return value
+
+ delta = datetime.now() - value
+ if delta.days != 0:
+ value = date(value.year, value.month, value.day)
+ return naturalday(value, arg)
+ elif delta.seconds == 0:
+ return _(u'now')
+ elif delta.seconds < 60:
+ return _(u'%s seconds ago' % (delta.seconds))
+ elif delta.seconds / 60 < 2:
+ return _(r'a minute ago')
+ elif delta.seconds / 60 < 60:
+ return _(u'%s minutes ago' % (delta.seconds/60))
+ elif delta.seconds / 60 / 60 < 2:
+ return _(u'an hour ago')
+ elif delta.seconds / 60 / 60 < 24:
+ return _(u'%s hours ago' % (delta.seconds/60/60))
+ return naturalday(value, arg)
+register.filter(naturaltime)