wake-up-neo.com

Wie kann ich ein Datum formatieren, das aus MongoDB stammt?

Ich verwende Jade, um meine Ansichten in Express.js darzustellen. Ich speichere Dokumente in MongoDB und verwende Mongoose, um auf meine Dokumente zuzugreifen. Ich speichere ein Standarddatum, das erstellt wurde, wenn ein neues Dokument erstellt wurde, und ich gebe das erstellte Datumsattribut an die Ansicht zurück, wo formatiert werden muss. Das Format des Datums, das in MongoDB gespeichert wird, ist:

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

Meine Frage ist: Wie formatiere ich dieses Datum in Jade (oder Mongoose oder Node.JS), das von MongoDB zurückkommt?

33
naivedeveloper

JavaScript bietet integrierte Unterstützung für Datumsangaben. Um Ihren String in ein Date-Objekt zu bekommen:

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

Jetzt können Sie verschiedene Methoden verwenden, um die benötigten Daten zu erhalten:

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

Sie können weitere Methoden auf der MDN-Referenzseite sehen. Sie können diese Methoden verwenden, um eine beliebige Zeichenfolge zu erstellen.

Für eine zuverlässigere Datums-/Zeitanalyse, Formatierung und Manipulation sollten Sie Moment.js unbedingt in einer anderen Antwort von s3v3n lesen.

45
Michelle Tilley

Ich hatte genau diese Anforderungen (Expressjs, Mungo, Jade) und so habe ich es für mich gelöst.

Zuerst habe ich momentjs mit npm install moment..__ installiert.

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

Dann verwenden Sie es wie folgt in 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

Ich denke, du hast es nicht leicht gemacht?

#{storeddate.toDateString()}
15
Wes Brown

Tatsächlich benötigen Sie in Ihrem Mongoose-Schema kein anderes Attribut zum Speichern des Erstellungsdatums, da _id diese Informationen enthält. Stattdessen können Sie ein virtual in Ihrem Mongoose-Schema erstellen, wie folgt:

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

Dies würde das reine Javascript-Datum als .date-Attribut für jedes Dokument zurückgeben.

Dann können Sie noch einen Schritt weitergehen und das gewünschte Datum in diesem virtuellen Format formatieren:

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

Hier ein Beispiel, wie das geht (EJS verwenden)

   <%

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

    %>

Jetzt können Sie diese Variablen so verwenden ...

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

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

2
AmJustSam

sehr einfache Verfahrensschritte

  1. installation über npm moment --save

  2. var deklarieren = erfordern ('moment');

  3. definiere die deklarierte Variable in res.render'filename.ejs ', {moment: moment});

  4. legen Sie diese Ejs in Ihre Ansichtsdatei <% = moment (data.column_name_of_your_date) .format ('DD MMM YYYY'); %>

ausgabe ist -- 09 Jun 2017

sie können das Format ändern, prüfen Sie im Moment den Link für ein anderes Format http://momentjs.com/

0

Meine Lösung lautet:

Fügen Sie momentjs zu Ihren Gebietsschemas für Expressanwendungen wie folgt hinzu:
app.locals.moment = require('moment');

Dann können Sie moment in beliebigen Jade-Dateien verwenden:
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

Referenz: Verwenden von Dienstprogrammbibliotheken in serverseitigen Jade-Vorlagen

0
Zhifeng Hu