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?
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.
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}
Ich denke, du hast es nicht leicht gemacht?
#{storeddate.toDateString()}
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();
});
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
sehr einfache Verfahrensschritte
installation über npm moment --save
var deklarieren = erfordern ('moment');
definiere die deklarierte Variable in res.render'filename.ejs ', {moment: moment});
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/
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