Login

Encoding datetime for JSON consumers like YUI

Author:
acdha
Posted:
December 22, 2009
Language:
Python
Version:
1.1
Tags:
javascript date json iso8601
Score:
1 (after 1 ratings)

Passing datetimes from Python to a YUI DataTable via JSON served by django-piston turned out to be surprisingly rocky. This code actually works with YAHOO.lang.JSON.stringToDate (not YAHOO.util.DataSource.parseDate) which cannot handle time zone specifiers other than "Z" or dates without timezones.

The YUI DataSource which uses this looks something like this - note that simply setting format:"date" does not work as that uses YAHOO.util.DataSource.parseDate, which usesDate.parse to do the actual conversion, which will involve browser-specific formats and as of this writing only Chrome's native Date can reliably parse ISO 8601 dates.

myDataSource.responseSchema = {
    resultsList: '…',
    fields: [
        …
        {
            key: 'my_date_field', 
            parser: YAHOO.lang.JSON.stringToDate
        },
    ],
    …
};
1
2
3
4
# Unlike datetime.isoformat(), this works in UTC and has the trailing Z which is
# required by JSON parsers such as YAHOO.lang.JSON.stringToDate:

time.strftime('%Y-%m-%dT%H:%M:%SZ', date.utctimetuple())

More like this

  1. JSON encode ISO UTC datetime by japerk 6 years, 3 months ago
  2. YUI editor for flatpages inside admin interface by nnrcschmdt 7 years, 4 months ago
  3. Client-side Django-style date & time string formatting by robbie 8 years, 4 months ago
  4. YUI Autocomplete by pigletto 7 years, 11 months ago
  5. Display arbitrary models by bjornkri 7 years ago

Comments

Please login first before commenting.