如何格式化MongoDB的日期?

nai*_*per 36 mongoose node.js express

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

Thu Dec 29 2011 20:14:56 GMT-0600 (CST)
Run Code Online (Sandbox Code Playgroud)

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

s3v*_*v3n 63

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

首先,我安装momentjsnpm install moment.然后我通过片刻使用这个:

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 });
    })
});
Run Code Online (Sandbox Code Playgroud)

然后在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}
Run Code Online (Sandbox Code Playgroud)

  • 真棒!最佳答案恕我直言! (6认同)

Mic*_*ley 51

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

date =  new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

您可以在MDN参考站点上看到更多方法.您可以使用这些方法构建所需的任何类型的字符串.

为了更加稳健日期/时间分析,格式和操纵,你一定要看看Moment.js由s3v3n在另一个答复中提到.

  • 如图所示,**date.getMonth()**在12月返回11.如果你要显示它,你可能想要使用**date.getMonth()+ 1**. (3认同)

小智 15

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

#{storeddate.toDateString()}
Run Code Online (Sandbox Code Playgroud)


dan*_*ugh 5

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

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime;
  });
Run Code Online (Sandbox Code Playgroud)

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

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

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime.toDateString();
  });
Run Code Online (Sandbox Code Playgroud)

  • +1表示存储generationTime是多余的,-1表示建议创建虚拟日期.这显然是显示值的问题,因此视图应该处理这个问题. (4认同)