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?
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.
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:
table
tr
td Subject
td Posted at
td Status
each job, i in jobs
tr
td #{job.subject}
td #{moment(job.postedAt).format("YYYY-MM-DD HH:mm")}
td #{job.status}