このドキュメントはフォーマットオプションとしてmoment.ISO_8601
を言及しています(2.7.0 - http://momentjs.com/docs/#/parsing/special-formats/ )しかし、これらのどちらでもない(2.7.0でも):
var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error
( http://jsfiddle.net/b3d6uy05/1/ )
Moment.jsからISO 8601を取得する方法を教えてください。
moment().toISOString(); // or format() - see below
http://momentjs.com/docs/#/displaying/as-iso-string/
更新答えに基づいて:@sennetによると@dvlsgによるコメント( Fiddle を参照) format
とtoISOString
には違いがあることに注意してください。どちらも正しいですが、根本的なプロセスは異なります。 toISOString
はDateオブジェクトに変換し、UTCに設定してからネイティブのDateプロトタイプ関数を使用してミリ秒(YYYY-MM-DD[T]HH:mm:ss.SSS[Z]
)付きでISO 8601をUTCで出力します。一方、format
はミリ秒なしでデフォルトのフォーマット(YYYY-MM-DDTHH:mm:ssZ
)を使用し、タイムゾーンオフセットを維持します。
予期しない結果につながる可能性があるため、 問題 を公開しました。
パラメータなしでformat
を使用します。
var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"
Vanilla JSでも可能
new Date().toISOString() // "2017-08-26T16:31:02.349Z"
Mongooseを使用して日付をMongoDBに格納するときは、すべての日付がミリ秒のISO日付として格納されるため、toISOString()を使用する必要があります。
moment.format()
2018-04-17T20:00:00Z
moment.toISOString() -> USE THIS TO STORE IN MONGOOSE
2018-04-17T20:00:00.000Z
日付部分(2017-06-27など)だけが必要で、タイムゾーンに関係なく、またアラビア語でも機能させたい場合は、以下のコードを作成します。
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
}