python format datetime with "st", "nd", "rd", "th" (english ordinal suffix) like PHP's "S"

Viewed 26637

I would like a python datetime object to output (and use the result in django) like this:

Thu the 2nd at 4:30

But I find no way in python to output st, nd, rd, or th like I can with PHP datetime format with the S string (What they call "English Ordinal Suffix") (http://uk.php.net/manual/en/function.date.php).

Is there a built-in way to do this in django/python? strftime isn't good enough (http://docs.python.org/library/datetime.html#strftime-strptime-behavior).

Django has a filter which does what I want, but I want a function, not a filter, to do what I want. Either a django or python function will be fine.

5 Answers

You can do this simply by using the humanize library

from django.contrib.humanize.templatetags.humanize import ordinal

You can then just give ordinal any integer, ie

ordinal(2) will return 2nd

I've just written a small function to solve the same problem within my own code:

def foo(myDate):
    date_suffix = ["th", "st", "nd", "rd"]

    if myDate % 10 in [1, 2, 3] and myDate not in [11, 12, 13]:
        return date_suffix[myDate % 10]
    else:
        return date_suffix[0]

Following solution I got for above problem:

datetime.strptime(mydate, '%dnd %B %Y')
datetime.strptime(mydate, '%dst %B %Y')
datetime.strptime(mydate, '%dth %B %Y')
datetime.strptime(mydate, '%drd %B %Y')
Related