Подтвердить что ты не робот

Как я могу отформатировать дату, исходящую от MongoDB?

Я использую Jade для рендеринга моих представлений из Express.js. Я сохраняю документы в MongoDB и используя Mongoose для доступа к моим документам. Я сохраняю дату по умолчанию, созданную при создании нового документа, и я возвращаю этот созданный атрибут даты в представление, где необходимо отформатировать. Формат даты, хранящейся в MongoDB, следующий:

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

Мой вопрос: как мне отформатировать эту дату в Jade (или Mongoose или Node.JS), возвращающемся с MongoDB?

4b9b3361

Ответ 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/