我正在使用Jade在Express.js中渲染我的视图。我正在MongoDB中保存文档并使用Mongoose访问我的文档。我正在保存创建新文档时创建的默认日期,并且我将该日期创建的属性返回到视图,其中需要格式化。 MongoDB中存储日期的格式为:
Thu Dec 29 2011 20:14:56 GMT-0600 (CST)
我的问题是:如何在从MongoDB回来的Jade(或Mongoose或Node.JS)中格式化这个日期?
答案 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)
非常简单的方法步骤 -
通过npm安装--save
声明var moment = require(&#39;时刻&#39;);
在res.render&#39; filename.ejs&#39;,{moment:moment})中定义声明变量;
将此ejs放入您的视图文件&lt;%= moment(data.column_name_of_your_date).format(&#39; DD MMM YYYY&#39;); %GT;
输出是 - 2017年6月9日
您可以更改格式,在不同格式http://momentjs.com/
的时刻链接中查看