I'm creating a filter in python/django. I want to make a datetime human-readable. You have multiple options: Plain Datetime ("04. Februar 2018, 18:18")
(bools="False,False"),
sentence Datetime ("am 04. Februar 2018 um 18:18")
(bools="True,False"),
onlydate Datetime ("04. Februar 2018")
(bools="False,True"),
sentence and onlyDate ("am 04. Februar 2018")
(bools="True,True")
Here's my filter:
@register.filter
def naturaldaytime(daytime, bools="False,False"):
if daytime is None:
return daytime
sentence = str2bool(bools.split(",")[0])
onlyDate = str2bool(bools.split(",")[1])
now = datetime.datetime.now()
difference = now.day - daytime.replace(tzinfo=None).day
loc = locale.setlocale(locale.LC_TIME, "de")
if onlyDate:
if difference == 0:
return daytime.strftime(settings.DATE_FORMAT_TODAY) if not sentence else daytime.strftime(settings.DATE_FORMAT_SENTENCE)
elif difference == 1:
return daytime.strftime(settings.DATE_FORMAT_YESTERDAY) if not sentence else daytime.strftime(settings.DATE_FORMAT_YESTERDAY)
elif now.isocalendar()[0] == daytime.isocalendar()[0]:
if now.isocalendar()[1] == daytime.isocalendar()[1]:
return daytime.strftime(settings.DATE_FORMAT_THIS_WEEK) if not sentence else daytime.strftime(settings.DATE_FORMAT_THIS_WEEK_SENTENCE)
return daytime.strftime(settings.DATE_FORMAT_THIS_YEAR) if not sentence else daytime.strftime(settings.DATE_FORMAT_THIS_YEAR_SENTENCE)
return daytime.strftime(settings.DATE_FORMAT) if not sentence else daytime.strftime(settings.DATE_FORMAT_SENTENCE)
else:
pass
#so what...
def str2bool(v):
return v.lower() in ("yes", "true", "t", "1")
and my settings vars:
TIME_FORMAT = "%H:%M"
DATE_FORMAT = "%d. %B %Y, {0}".format(TIME_FORMAT)
DATE_FORMAT_THIS_YEAR = "%d. %B, {0}".format(TIME_FORMAT)
DATE_FORMAT_THIS_WEEK = "%A, {0}".format(TIME_FORMAT)
DATE_FORMAT_YESTERDAY = "Gestern, {0}".format(TIME_FORMAT)
DATE_FORMAT_TODAY = "Heute, {0}".format(TIME_FORMAT)
DATE_FORMAT_SENTENCE = "am %d. %B %Y um {0} Uhr".format(TIME_FORMAT)
DATE_FORMAT_THIS_YEAR_SENTENCE = "am %d. %B um {0} Uhr".format(TIME_FORMAT)
DATE_FORMAT_THIS_WEEK_SENTENCE = "diesen %A um {0} Uhr".format(TIME_FORMAT)
DATE_FORMAT_YESTERDAY_SENTENCE = "gestern um {0} Uhr".format(TIME_FORMAT)
DATE_FORMAT_TODAY_SENTENCE = "heute um {0} Uhr".format(TIME_FORMAT)