Как я могу отформатировать дату, исходящую от MongoDB?
Я использую Jade для рендеринга моих представлений из Express.js. Я сохраняю документы в MongoDB и используя Mongoose для доступа к моим документам. Я сохраняю дату по умолчанию, созданную при создании нового документа, и я возвращаю этот созданный атрибут даты в представление, где необходимо отформатировать. Формат даты, хранящейся в MongoDB, следующий:
Thu Dec 29 2011 20:14:56 GMT-0600 (CST)
Мой вопрос: как мне отформатировать эту дату в Jade (или Mongoose или Node.JS), возвращающемся с MongoDB?
Ответы
Ответ 1
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
Вы можете увидеть больше методов на справочном сайте MDN. Вы можете использовать эти методы для создания любой нужной строки.
Для более надежного анализа времени и времени, форматирования и манипуляций вам обязательно нужно проверить Moment.js, как указано s3v3n в другом ответе.
Ответ 2
У меня были именно эти требования (expressjs, mongoose, jade), и именно так я решил это для себя.
Прежде всего, я установил momentjs с помощью npm 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 });
})
});
Затем, используя это в 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}
Ответ 3
Я думаю, вы не пробовали простой способ?
#{storeddate.toDateString()}
Ответ 4
На самом деле вам не нужен другой атрибут в вашей схеме Mongoose для хранения даты создания, так как _id
имеет эту информацию. Вместо этого вы можете создать virtual в своей схеме Mongoose, например:
YourSchema.virtual('date')
.get(function() {
return this._id.generationTime;
});
Это вернет необработанную дату Javascript как атрибут .date
для каждого документа.
Затем вы можете сделать еще один шаг и отформатировать дату, по которой вы хотите в этом виртуальном:
YourSchema.virtual('date')
.get(function() {
return this._id.generationTime.toDateString();
});
Ответ 5
Вот пример того, как это можно сделать (с помощью 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
Ответ 6
Мое решение:
Добавьте momentjs своим местным местным приложениям, например:
app.locals.moment = require('moment');
Затем вы можете использовать момент в любых нефритовых файлах:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'
Ссылка:
Использование библиотек служебных программ в серверных Jade-шаблонах
Ответ 7
очень простые шаги метода -
-
установить через момент npm --save
-
объявить var moment = require ('moment');
-
определить переменную declare в res.render'filename.ejs ', {moment: moment});
-
поместите этот ejs в ваш файл вида <% = момент (data.column_name_of_your_date).format('DD MMM YYYY'); % >
вывод -
09 июня 2017 г.
вы можете изменить формат, чтобы проверить его в момент ссылки для другого формата http://momentjs.com/