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
very easy method steps-
install via npm moment --save
declare var moment = require('moment');
define the declare variable in res.render'filename.ejs',{moment: moment});
put this ejs in your view file <%= moment(data.column_name_of_your_date).format( 'DD MMM YYYY'); %>
output is -- 09 Jun 2017
you can changed the format check it out in moment link for different format http://momentjs.com/
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}
Actually, you don't need another attribute in your Mongoose schema to store the creation date, as the _id
has that information. Instead, you can create a virtual on your Mongoose schema, like this:
YourSchema.virtual('date')
.get(function() {
return this._id.generationTime;
});
That would return the raw Javascript date as the .date
attribute for each document.
Then you can take that one step further and format the date you way you want to in that virtual:
YourSchema.virtual('date')
.get(function() {
return this._id.generationTime.toDateString();
});
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.
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
Here's an example on how can do that (Using EJS)
<%
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var d = post.date.getDate();
var m = monthNames[post.date.getMonth()];
var y = post.date.getFullYear();
%>
Now You Can Use These Variables Like This...
<small style="color: red"><%= post.date %></small>
Source: https://medium.com/@littlelostify/how-to-format-mongoose-crappy-date-10df67d7a2d6