javascript - examples - ¿Cómo formateo una fecha como ISO 8601 en moment.js?
moment timezone (5)
Cuando usa Mongoose para almacenar fechas en MongoDB, debe usar toISOString () porque todas las fechas se almacenan como fechas ISO con milisegundos.
moment.format()
2018-04-17T20:00:00Z
moment.toISOString() -> USE THIS TO STORE IN MONGOOSE
2018-04-17T20:00:00.000Z
Estos documentos mencionan
moment.ISO_8601
como una opción de formato (desde 2.7.0 -
http://momentjs.com/docs/#/parsing/special-formats/
), pero ninguno de estos funciona (incluso 2.7.0):
var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error
( http://jsfiddle.net/b3d6uy05/1/ )
¿Cómo puedo obtener un ISO 8601 de moment.js?
Si solo desea la parte de la fecha (por ejemplo, 2017-06-27), y desea que funcione independientemente de la zona horaria y también en árabe, aquí está el código que escribí:
function isoDate(date) {
if (!date) {
return null
}
date = moment(date).toDate()
// don''t call toISOString because it takes the time zone into
// account which we don''t want. Also don''t call .format() because it
// returns Arabic instead of English
var month = 1 + date.getMonth()
if (month < 10) {
month = ''0'' + month
}
var day = date.getDate()
if (day < 10) {
day = ''0'' + day
}
return date.getFullYear() + ''-'' + month + ''-'' + day
}
También es posible con vanilla JS
new Date().toISOString() // "2017-08-26T16:31:02.349Z"
Usar
format
sin parámetros:
var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"
moment().toISOString(); // or format() - see below
http://momentjs.com/docs/#/displaying/as-iso-string/
Actualización
Basado en la respuesta: por @sennet y el comentario de @dvlsg (ver
Fiddle
), debe tenerse en cuenta que hay una diferencia entre
format
y
toISOString
.
Ambos son correctos pero el proceso subyacente difiere.
toISOString
convierte en un objeto Date, se establece en UTC y luego utiliza la función de prototipo Date nativa para generar ISO8601 en UTC con milisegundos (
YYYY-MM-DD[T]HH:mm:ss.SSS[Z]
).
Por otro lado, el
format
utiliza el formato predeterminado (
YYYY-MM-DDTHH:mm:ssZ
) sin milisegundos y mantiene el desplazamiento de la zona horaria.
Abrí un issue porque creo que puede conducir a resultados inesperados.