Skip to content

Instantly share code, notes, and snippets.

@Flushot
Created June 14, 2013 23:09
Show Gist options
  • Save Flushot/5785988 to your computer and use it in GitHub Desktop.
Save Flushot/5785988 to your computer and use it in GitHub Desktop.
Jinja2 filter that formats a date and optionally localizes it to client timezone
from dateutil import tz
from jinja2 import Undefined
client_timezone = tz.gettz('PST8PDT') # timezone to translate to
@app.template_filter()
def dateformat(value, format=None, rebase=True):
if value is None or isinstance(value, Undefined):
return ''
if value.year < 1900:
return '' # prevent strftime() errors
localize = lambda v: (makeAware(v).astimezone(client_timezone) if (v and rebase) else v)
formatters = {
datetime.datetime: ('%m/%d/%y %r', lambda v: localize(v)),
datetime.date: ('%m/%d/%y', lambda v: localize(datetime.datetime.combine(v, datetime.time(0, 0, 0)))),
datetime.time: ('%r', lambda v: localize(datetime.datetime.combine(datetime.datetime.now(), v)))
}
for t, formatter in formatters.items():
if value.__class__ == t:
defaultFormat, localizeVal = formatter
return localizeVal(value).strftime(format or defaultFormat)
# Unknown type
raise ValueError('value must be a datetime, date, or time')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment