How can I format a date coming from MongoDB?


I'm using Jade to render my views from within Express.js. I am saving documents in MongoDB and using Mongoose to access my documents. I am saving a default date created when a new document is created and I am returning that date created attribute to the view, where is needs to be formatted. The format of the date being stored within MongoDB is:

Thu Dec 29 2011 20:14:56 GMT-0600 (CST)

My question is: How do I format this date in Jade (or Mongoose or Node.JS) coming back from MongoDB?

12/30/2011 3:13:44 AM

Accepted Answer

JavaScript has built-in support for dates. First, to get your string into a Date object:

date =  new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')

Now you can use various methods on the date to get the data you need:

date.toDateString() // "Thu Dec 29 2011"
date.toUTCString()  // "Fri, 30 Dec 2011 02:14:56 GMT"
date.getMonth()     // 11
date.getDate()      // 29
date.getFullYear()  // 2011

You can see more methods on the MDN reference site. You can use these methods to build any kind of string you want.

For more robust date/time parsing, formatting, and manipulation, you should definitely check out Moment.js as mentioned by s3v3n in another answer.

8/2/2016 6:08:25 PM

I had exactly this requirements (expressjs, mongoose, jade) and this is how I solved it for myself.

First of all I installed momentjs with npm install moment. Then I passed moment to view using this:

var moment = require('moment');

app.get('/', function(req, res){
    // find all jobs using mongoose model
    Job.find().exec(function(err, items){
        // pass moment as a variable
        res.render('status', { 'jobs': items, moment: moment });

Then using it like this in Jade:

    td Subject
    td Posted at
    td Status
  each job, i in jobs
      td #{job.subject}
      td #{moment(job.postedAt).format("YYYY-MM-DD HH:mm")}
      td #{job.status}

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow