如何格式化MongoDB的日期?

时间:2011-12-30 02:45:30

标签: node.js mongoose express

我正在使用Jade在Express.js中渲染我的视图。我正在MongoDB中保存文档并使用Mongoose访问我的文档。我正在保存创建新文档时创建的默认日期,并且我将该日期创建的属性返回到视图,其中需要格式化。 MongoDB中存储日期的格式为:

Thu Dec 29 2011 20:14:56 GMT-0600 (CST)

我的问题是:如何在从MongoDB回来的Jade(或Mongoose或Node.JS)中格式化这个日期?

7 个答案:

答案 0 :(得分:62)

我有这个要求(expressjs,mongoose,jade),这就是我为自己解决的问题。

首先,我使用npm install moment安装了momentjs。 然后我通过时间来查看使用它:

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 });
    })
});

然后在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}

答案 1 :(得分:47)

JavaScript内置了对日期的支持。首先,将您的字符串放入Date对象:

date =  new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')

现在,您可以在日期上使用各种方法来获取所需的数据:

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

您可以看到更多方法on the MDN reference site。您可以使用这些方法构建任何类型的字符串。

对于更强大的日期/时间解析,格式化和操作,您绝对应该在另一个答案中查看s3v3n所提到的Moment.js

答案 2 :(得分:15)

我猜你还没有尝试过简单的方法?

#{storeddate.toDateString()}

答案 3 :(得分:5)

实际上,您的Mongoose架构中不需要另一个属性来存储创建日期,因为_id具有该信息。相反,您可以在Mongoose架构上创建virtual,如下所示:

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime;
  });

这会将原始Javascript日期作为每个文档的.date属性返回。

然后,您可以更进一步,在该虚拟中格式化您想要的日期:

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime.toDateString();
  });

答案 4 :(得分:2)

这是一个如何做到这一点的例子(使用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();

    %>

现在你可以像这样使用这些变量......

<small style="color: red"><%= post.date  %></small>

来源: https://medium.com/@littlelostify/how-to-format-mongoose-crappy-date-10df67d7a2d6

答案 5 :(得分:0)

我的解决方案是:

momentjs添加到您的快速应用程序本地,如下所示:
app.locals.moment = require('moment');

然后你可以在任何玉器文件中使用时刻:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

参考: Making use of utility libraries in server-side Jade templates

答案 6 :(得分:0)

非常简单的方法步骤 -

  1. 通过npm安装--save

  2. 声明var moment = require(&#39;时刻&#39;);

  3. 在res.render&#39; filename.ejs&#39;,{moment:moment})中定义声明变量;

  4. 将此ejs放入您的视图文件&lt;%= moment(data.column_name_of_your_date).format(&#39; DD MMM YYYY&#39;); %GT;

  5. 输出是 - 2017年6月9日

    您可以更改格式,在不同格式http://momentjs.com/

    的时刻链接中查看