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?
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.
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}
Je suppose que tu n'as pas essayé la solution de facilité?
#{storeddate.toDateString()}
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();
});
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
étapes de la méthode très facile
installer via npm moment --save
declare var moment = require ('moment');
définir la variable de déclaration dans res.render'filename.ejs ', {moment: moment});
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/