trying to format a date on jade template

babbaggeii picture babbaggeii · Jun 4, 2013 · Viewed 29.5k times · Source

I have an index.js:

exports.index = function(req, res){
  db.courses.find(function(err, currentCourses) {
    res.render('index', {
      currentCourses: currentCourses
    });
  });
};

And on my jade template:

tr
    td #{currentCourses[0].start}

Which is a date, formatted as "Sun Sep 29 2013 00:00:00 GMT+0100 (BST)".

How can I format it to "29 Sep 2013"?

Edit (after Ed Hinchliffe's comments):

-function prettyDate(dateString){
    -var d = date.getDate(dateString);
    -var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    -var m = monthNames[date.getMonth()];
    -var y = date.getFullYear();
    -return d+' '+m+' '+y;
-} 
for course in currentCourses
    tr
        td #{prettyDate(course.start)}

Answer

Zhifeng Hu picture Zhifeng Hu · Sep 20, 2014

My solution is:

Add momentjs to your express application locals like this:
app.locals.moment = require('moment');

Then you can use moment in any jade files:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

Reference:
Making use of utility libraries in server-side Jade templates