web-dev-qa-db-fra.com

Comment formater une date provenant de MongoDB?

J'utilise Jade pour rendre mes vues à partir d'Express.js. Je sauvegarde des documents dans MongoDB et j'utilise Mongoose pour accéder à mes documents. Je suis en train d'enregistrer une date par défaut créée lors de la création d'un nouveau document et je renvoie l'attribut de cette date à la vue, où il doit être formaté Le format de la date stockée dans MongoDB est le suivant:

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

Ma question est: comment formater cette date en Jade (ou Mongoose ou Node.JS) en revenant de MongoDB?

33
naivedeveloper

JavaScript a un support intégré pour les dates. Tout d'abord, pour obtenir votre chaîne dans un objet Date:

date =  new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')

Maintenant, vous pouvez utiliser différentes méthodes sur la date pour obtenir les données dont vous avez besoin:

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

Vous pouvez voir plus de méthodes sur le site de référence MDN . Vous pouvez utiliser ces méthodes pour créer le type de chaîne souhaité.

Pour une analyse, un formatage et une manipulation plus robustes de la date et de l'heure, vous devez absolument consulter Moment.js comme mentionné par s3v3n dans une autre réponse.

45
Michelle Tilley

J'avais exactement ces exigences (expressjs, mangouste, jade) et c'est comme ça que je l'ai résolu pour moi-même.

Tout d’abord, j’ai installé momentjs avec npm install moment. Ensuite, j’ai passé un moment à regarder en utilisant ceci:

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 });
    })
});

Puis l'utiliser comme ça en 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}
61
s3v3n

Je suppose que tu n'as pas essayé la solution de facilité?

#{storeddate.toDateString()}
15
Wes Brown

En fait, vous n'avez pas besoin d'un autre attribut dans votre schéma Mongoose pour stocker la date de création, car le _id contient ces informations. A la place, vous pouvez créer un virtual sur votre schéma Mongoose, comme ceci:

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime;
  });

Cela renverrait la date Javascript brute sous forme d'attribut .date pour chaque document.

Ensuite, vous pouvez aller plus loin et formater la date que vous souhaitez dans le virtuel:

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime.toDateString();
  });
5
danmactough

Voici un exemple sur comment faire cela (en utilisant 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();

    %>

Maintenant, vous pouvez utiliser ces variables comme ceci ...

<small style="color: red"><%= post.date  %></small>

Source: https://medium.com/@littlelostify/how-to-format-mongoose-crappy-date-10df67d7a2d6

2
AmJustSam

étapes de la méthode très facile

  1. installer via npm moment --save

  2. declare var moment = require ('moment');

  3. définir la variable de déclaration dans res.render'filename.ejs ', {moment: moment});

  4. mettez cet ejs dans votre fichier de vue <% = moment (nom_colonne_données_de_votre_date). %>

la sortie est -- 09 juin 2017

vous pouvez changer le format vérifier en moment le lien pour le format différent http://momentjs.com/

0
Y. Joy Ch. Singha