2011-12-30 37 views
30

Estoy usando Jade para representar mis vistas desde Express.js. Estoy guardando documentos en MongoDB y usando Mongoose para acceder a mis documentos. Estoy guardando una fecha predeterminada creada cuando se crea un nuevo documento y estoy devolviendo ese atributo de fecha de creación a la vista, donde se debe formatear. El formato de la fecha que se almacena dentro de MongoDB es:¿Cómo puedo formatear una fecha procedente de MongoDB?

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

Mi pregunta es: ¿Cómo formateo esta fecha en Jade (o Mangosta o Node.JS) regresando de MongoDB?

Respuesta

40

JavaScript cuenta con el soporte integrado para las fechas. En primer lugar, para obtener su cadena en un objeto Date:

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

Ahora usted puede utilizar varios métodos en la fecha para obtener los datos que necesita:

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 

se puede ver más métodos on the MDN reference site. Puede usar estos métodos para construir cualquier tipo de cadena que desee.

Para análisis, formateo y manipulación de fecha y hora más robustos, definitivamente debe consultar Moment.js mencionado por s3v3n en otra respuesta.

+0

hombre, esto hace que se trata de fechas mucho trabajo al mostrarlos :( – CpILL

+6

@CILL: echa un vistazo a http://momentjs.com/ –

+3

Como se muestra, ** date.getMonth() ** devuelve 11 para diciembre. Probablemente quieras usar ** date.getMonth () + 1 ** si lo muestra. –

5

En realidad, no necesita otro atributo en su esquema de Mongoose para almacenar la fecha de creación, ya que el _id tiene esa información. En su lugar, puede crear un virtual en el esquema de la mangosta, de esta manera:

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

que devolvería la fecha Javascript prima como el atributo .date para cada documento.

, entonces puede tomar un paso más allá y dar formato a la fecha en que la forma que desee en dicho virtual:

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

+1 para señalar que el almacenamiento de generationTime es redundante, -1 para proponer la creación de una fecha virtual. Esto es obviamente una cuestión de mostrar el valor, por lo que la vista debe manejar esto. – enyo

15

supongo que no has probado el camino más fácil?

#{storeddate.toDateString()} 
+1

O, para soltar el día de la semana ... # {storeddate.toDateString(). Substr (4,12)} –

56

Tenía exactamente estos requisitos (expressjs, mangosta, jade) y así es como lo resolví por mí mismo.

Primero de todo instalé momentjs con npm install moment. Entonces me pasaron momento que desee ver con esto:

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

Luego, utilizando así 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} 
+5

Awesome! La mejor respuesta en mi humilde opinión! –

+0

@ s3v3n Eres DIOS. Esto me salvó el día. Fue frustrado por 3-4 horas. – theChinmay

2

He aquí un ejemplo de cómo se puede hacer eso (Uso de 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(); 

    %> 

Ahora puede utilizar estas variables como esto ...

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

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

0

método muy fácil pasos-

  1. instalar a través de momento NPM --save

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

  3. define la variable de declaración en res.render'filename.ejs ', {moment: moment});

  4. pon este ejs en tu archivo de vista <% = momento (data.column_name_of_your_date) .format ('DD MMM YYYY'); %>

salida es - 09 Jun 2017

se puede cambiar el formato de comprobar que en enlace momento de formato diferente http://momentjs.com/

Cuestiones relacionadas