Display time elapsed since timestamp of a mongodb object + reformatting timestamp
Inject a moment
object into your ejs templates that manipulates date objects to display different formats. For example:
var moment = require('moment');var Blog = require('./models/blog');exports.index = function(req, res) { Blog.find().exec(function(err, blogs){ if (err) throw err; // send moment to your ejs res.render('index', { moment: moment, blogs: blogs }); });}
And in your template, use the fromNow()
API for displaying the timeago or relative time:
<div id="comments"> <% blog.comments.forEach(function(comment){ %> <div class="jumbotron comment"> <div class="row"> <div class="col-md-1"> <img class="comment-ico" src = "<%=comment.author.image%>"> </div> <div class="col-md-7"> <h4><%=comment.author.username%></h4> </div> <div class="col-md-4 date"> Created <%= moment(comment.created).fromNow(true) %> ago </div> <!--<div class="col-md-4 date"> Created at <%= moment(comment.created).format('Do MMM YYYY') %> </div>--> </div> </div><div><p><%=comment.text%></p></div>
Another alternative is to create an ejs filter function that will return fromNow:
JavaScript
var ejs = require('ejs');var moment = require('moment');ejs.filters.fromNow = function(date) { return moment(date).fromNow();}
Template
<div class="col-md-4 date"> Created <%= comment.created | fromNow %> ago </div>
Remember to have moment added to your package.json file:
npm install moment
UPDATE
Using your actual code, you only need to use the moment object on the line you create the commentCreated
variable:
// create new commentComment.create(req.body.comment, function(err, comment){ if(err) { req.flash("error", "Something went wrong"); console.log(err); } else { comment.author.id = req.user._id; comment.author.username = req.user.username; comment.author.image = req.user.image; comment.save(); // connect new comment to campground blog.comments.push(comment); blog.save(); var commentCreated = moment(comment.created).fromNow(); // use moment here if(req.xhr){ res.json({comment: comment, commentCreated: commentCreated, blog: blog}); } else { // // redirect to campground show page req.flash("success", "Successfully added comment"); res.redirect("/blogs/" + blog._id); } }});