mirror of https://gitlab.com/brutaldon/brutaldon
Add humane_time filter
To work properly, it needs to know the user's timezone, and that isn't set up yet.
This commit is contained in:
parent
2c0cc42ae1
commit
1d240339de
|
@ -1,3 +1,4 @@
|
||||||
|
{% load humanetime %}
|
||||||
{% load humanize %}
|
{% load humanize %}
|
||||||
{% load sanitizer %}
|
{% load sanitizer %}
|
||||||
{% load taglinks %}
|
{% load taglinks %}
|
||||||
|
@ -30,7 +31,7 @@
|
||||||
<strong>{{ toot.account.display_name }}</strong>
|
<strong>{{ toot.account.display_name }}</strong>
|
||||||
<small><a href="{% url "user" toot.account.acct %}">@{{ toot.account.acct }}</a></small>
|
<small><a href="{% url "user" toot.account.acct %}">@{{ toot.account.acct }}</a></small>
|
||||||
<a href="{{ toot.url }}">
|
<a href="{{ toot.url }}">
|
||||||
<small>{{ toot.created_at |naturaltime }}</small>
|
<small>{{ toot.created_at |humane_time }}</small>
|
||||||
</a>
|
</a>
|
||||||
{% if reblog %}
|
{% if reblog %}
|
||||||
<br>
|
<br>
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from django.utils.timezone import get_default_timezone, get_current_timezone, make_naive
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
@register.filter(is_safe=True)
|
||||||
|
def humane_time(arg):
|
||||||
|
'''Returns a time string that is humane but not relative (unlike Django's humanetime)
|
||||||
|
|
||||||
|
For times less than 6 hours ago: display date and time to the minute.
|
||||||
|
For times less than 12 hours ago: display date and time to the hour.
|
||||||
|
For times more than 12 hours ago display date and "time of day".
|
||||||
|
For times more than 2 days ago display date.
|
||||||
|
For times more than 6 months ago, display month and year.
|
||||||
|
For times more than 10 years ago, display year.
|
||||||
|
|
||||||
|
Prefer words to numbers, unless it is too long.
|
||||||
|
|
||||||
|
The goal is a date/time that is always accurate no matter how long it's
|
||||||
|
been sitting there waiting for you to look at it, but is only precise
|
||||||
|
to a degree you are liable to care about.
|
||||||
|
|
||||||
|
It is not safe to use on future times.
|
||||||
|
|
||||||
|
'''
|
||||||
|
now = datetime.now()
|
||||||
|
arg = make_naive(arg, timezone=get_current_timezone())
|
||||||
|
diff = now - arg
|
||||||
|
|
||||||
|
if diff < timedelta(hours=6):
|
||||||
|
return arg.strftime("%a, %b %d, %Y at %I:%M %p")
|
||||||
|
elif diff < timedelta(hours=12):
|
||||||
|
return arg.strftime("%a, %b %d, %Y around %I %p")
|
||||||
|
elif diff < timedelta(days=2):
|
||||||
|
return arg.strftime("%a, %b %d, %Y in the ") + time_of_day(arg.hour)
|
||||||
|
elif diff < timedelta(days=6*28):
|
||||||
|
return arg.strftime("%b %d, %Y")
|
||||||
|
elif diff < timedelta(days=10*365):
|
||||||
|
return arg.strftime("%b, %Y")
|
||||||
|
else:
|
||||||
|
return arg.strftime("%Y")
|
||||||
|
|
||||||
|
def time_of_day(hour):
|
||||||
|
"""Return a description of what time of day an hour is.
|
||||||
|
|
||||||
|
This is very english-centric and probably not translatable.
|
||||||
|
"""
|
||||||
|
if hour < 3:
|
||||||
|
return "wee hours"
|
||||||
|
elif hour < 6:
|
||||||
|
return "early morning"
|
||||||
|
elif hour < 12:
|
||||||
|
return "morning"
|
||||||
|
elif hour < 18:
|
||||||
|
return "afternoon"
|
||||||
|
elif hour < 22:
|
||||||
|
return "evening"
|
||||||
|
else:
|
||||||
|
return "night"
|
Loading…
Reference in New Issue