Search code examples
javascriptbackbone.js

How to handle dates in Backbone?


I store dates in the DATETIME format in a MySQL database. When a model is fetched from the database, dates (in the DATETIME format) are converted to date objects in the model's initialize method. So far so good.

When the model is saved to the server, the date objects need to be converted back to the DATETIME format in order for the server side code to interpret the dates correctly. I have used all sorts of hackery to do this, but I wonder at what stage can of the model's save method can I safely convert the dates to the DATETIME format?

One approach is to do the following:

this.model.save({
    date : date.toDateTime()
}, options);

However, this causes a change event to be fired since the attributes hash before the save method is not the same as the hash after the save event (and this triggers Backbone's set method).


Solution

  • I would advice using UNIX time (number of seconds/milliseconds from 1970) both in model and in the interface and converting to readable date only in View.

    So the server both sends and receives dates as numbers like 1328281766454 and this is how you store them in Backbone.Model. When it has to be rendered in View you can simply call:

    new Date(this.model.get('someTime'));  //Fri Feb 03 2012 16:09:26 GMT+0100 (CET)
    

    The same can be done on the server side. Believe me, this is the simplest and most portable way of transfrering dates without all these time-zone issues.