Cette documentation mentionne moment.ISO_8601
comme option de formatage (à partir de 2.7.0 - http://momentjs.com/docs/#/parsing/special-formats/ ), mais aucune de ces méthodes ne fonctionne. (même 2.7.0):
var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error
( http://jsfiddle.net/b3d6uy05/1/ )
Comment puis-je obtenir une ISO 8601 de moment.js?
moment().toISOString(); // or format() - see below
http://momentjs.com/docs/#/displaying/as-iso-string/
Update Basé sur la réponse: by @sennet et le commentaire de @dvlsg (voir Fiddle ), il convient de noter qu'il est une différence entre format
et toISOString
. Les deux sont corrects mais le processus sous-jacent diffère. toISOString
est converti en un objet Date, les jeux en UTC utilisent ensuite la fonction prototype Date native pour générer ISO8601 en UTC en millisecondes (YYYY-MM-DD[T]HH:mm:ss.SSS[Z]
). D'autre part, format
utilise le format par défaut (YYYY-MM-DDTHH:mm:ssZ
) sans millisecondes et conserve le décalage du fuseau horaire.
J'ai ouvert un numéro car je pense que cela peut conduire à des résultats inattendus.
Utilisez format
sans paramètres:
var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"
Aussi possible avec Vanilla JS
new Date().toISOString() // "2017-08-26T16:31:02.349Z"
Lorsque vous utilisez Mongoose pour stocker des dates dans MongoDB, vous devez utiliser toISOString (), car toutes les dates sont stockées sous la forme ISOdates avec des millisecondes.
moment.format()
2018-04-17T20:00:00Z
moment.toISOString() -> USE THIS TO STORE IN MONGOOSE
2018-04-17T20:00:00.000Z
Si vous voulez seulement la portion de date (par exemple, 2017-06-27) et que vous voulez que cela fonctionne quel que soit le fuseau horaire et aussi en arabe, voici le code que j'ai écrit:
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
}