How can I format a date coming from MongoDB?

前端 未结 7 641
青春惊慌失措
青春惊慌失措 2021-01-30 05:19

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

相关标签:
7条回答
  • 2021-01-30 05:44

    very easy method steps-

    1. install via npm moment --save

    2. declare var moment = require('moment');

    3. define the declare variable in res.render'filename.ejs',{moment: moment});

    4. 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/

    0 讨论(0)
  • 2021-01-30 05:48

    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}
    
    0 讨论(0)
  • 2021-01-30 05:54

    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();
      });
    
    0 讨论(0)
  • 2021-01-30 05:56

    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.

    0 讨论(0)
  • 2021-01-30 05:58

    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

    0 讨论(0)
  • 2021-01-30 05:59

    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

    0 讨论(0)
提交回复
热议问题