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?
The DATE type in MongoDB can store date and time values as a combined unit. The BSON Date type is a signed 64-bit integer representing the number of milliseconds since the Unix epoch (Jan 1, 1970).
MongoDB stores times in UTC by default, and will convert any local time representations into this form. Applications that must operate or report on some unmodified local time value may store the time zone alongside the UTC timestamp, and compute the original local time in their application logic.
The recommended way to store dates in MongoDB is to use the BSON Date data type. , which was 00:00:00 UTC on 1 January 1970. This provides a lot of flexibilty in past and future dates. With a 64-bit integer in use, we are able to represent dates roughly 290 million years before and after the epoch.
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}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With