我如何格式化来自MongoDB的date?
我使用Jade在Express.js中呈现我的视图。 我将文档保存在MongoDB中,并使用Mongoose来访问我的文档。 我保存创build新文档时创build的默认date,并将该date创build的属性返回到视图,其中需要格式化。 存储在MongoDB中的date格式是:
Thu Dec 29 2011 20:14:56 GMT-0600 (CST)
我的问题是:我如何格式化这个date从翡翠(或Mongoose或Node.JS)从MongoDB回来?
JavaScript内置了对date的支持。 首先,让你的string进入一个Date对象:
date = new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')
现在,您可以使用date中的各种方法来获取所需的数据:
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
您可以在MDN参考站点上看到更多方法。 你可以使用这些方法来构build任何你想要的string。
为了更健壮的date/时间parsing,格式化和操作,你应该在另一个答案中检查出s3v3n提到的Moment.js。
我有这个要求(expressjs,mongoose,玉),这就是我自己解决这个问题。
首先我用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 }); }) });
然后在翡翠中这样使用它:
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}
我想你还没有尝试过简单的方法?
#{storeddate.toDateString()}
实际上,您不需要Mongoose模式中的另一个属性来存储创builddate,因为_id
具有该信息。 相反,你可以在你的Mongoose模式上创build一个虚拟的 ,就像这样:
YourSchema.virtual('date') .get(function() { return this._id.generationTime; });
这将返回原始的Javascriptdate作为每个文档的。
然后,您可以进一步进一步,按照您想要的方式在该虚拟中设置date:
YourSchema.virtual('date') .get(function() { return this._id.generationTime.toDateString(); });
这里是一个例子,如何做到这一点(使用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(); %>
现在你可以使用这些variables像这样…
<small style="color: red"><%= post.date %></small>
来源: https : //medium.com/@littlelostify/how-to-format-mongoose-crappy-date-10df67d7a2d6
我的解决scheme是:
向您的快速应用程序本地人添加momentjs ,如下所示:
app.locals.moment = require('moment');
那么你可以使用任何玉文件的时刻:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'
参考: 在服务器端Jade模板中使用实用程序库
非常简单的方法步骤 –
-
通过npm时刻安装 – 保存
-
声明var moment = require('moment');
-
在res.render'filename.ejs',{moment:moment})中定义declarevariables;
-
把这个ejs放在你的视图文件中<%= moment(data.column_name_of_your_date).format('DD MMM YYYY'); %>
产量为2017年6月9日
你可以改变格式检查出来的瞬间链接为不同的格式http://momentjs.com/
- 如何使用id-aes256-GCM与Node.JSencryption? “TypeError:DecipherFinal失败”
- sendFile()在推送到heroku时不发送ng build dist / index.html文件
- Express和ajax使用JQuery发布
- res.json()和res.end()之间的性能差异
- Node.js:GET请求返回404 Not Found
- login后什么需要发生从mongodb拉用户的个人资料?
- 为什么下面的JavaScript正则expression式不能工作?
- 我应该在Node.js(Express)应用程序中定义我的MySQL客户端?
- busboy不发射领域,文件事件