如何在 moment.js 中将日期格式化为 ISO 8601?

IT技术 javascript momentjs date-formatting iso8601
2021-03-02 12:16:06

该文档提到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?

6个回答
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])输出 UTC 格式的 ISO8601 另一方面,format使用YYYY-MM-DDTHH:mm:ssZ没有毫秒的默认格式 ( ) 并保持时区偏移。

我打开了一个问题,因为我认为它会导致意想不到的结果。

在 kibana 中格式化日期但您无权访问 JS 时很有用。
2021-04-24 12:16:06
如果您想要 UTC 时间,但以您自己的方式格式化,而不是 ISO8601,您可以执行以下操作: moment().utc().format("OUTPUT_FORMAT")
2021-05-02 12:16:06
如果要保持本地时区,请使用moment().toISOString(true);.
2021-05-15 12:16:06
我同意你@Yashua。我认为应该避免使用“format()”,因为它不直观。此外,我认为根本不应该存在仅包装本机“toISOString()”的函数。话虽如此,也许会提供一个新功能,例如:“toISO8601()”,并且可以选择保留时区和适当的文档会更好。
2021-05-19 12:16:06

format不带参数使用

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

( http://jsfiddle.net/8gvhL1dz/ )

toISOString 不会在您的本地时区输出 - 它始终使用(零偏移)UTC。
2021-05-04 12:16:06
顺便提一下,这两个答案并不相同,即使它们都满足 ISO 格式要求。date.toISOString()将保留毫秒并使用 UTC,date.format()将删除毫秒并使用您的本地时区(或者至少,这是我目前在 chrome 中遇到的行为 - jsfiddle.net/8gvhL1dz/22
2021-05-11 12:16:06
将 .format() 与阿拉伯语语言环境一起使用会导致阿拉伯符号而不是英语符号,这可能是不可取的。
2021-05-18 12:16:06

也可以使用 vanilla JS

new Date().toISOString() // "2017-08-26T16:31:02.349Z"
仅当您希望在 UTC 中使用时,无需维护时区。
2021-04-30 12:16:06

当您使用 Mongoose 将日期存储到 MongoDB 中时,您需要使用 toISOString() 因为所有日期都存储为带毫秒的 ISOdates。

moment.format() 

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z
var date = moment(new Date(), moment.ISO_8601);
console.log(date);
你能详细说明一下你的答案吗?
2021-04-25 12:16:06