使用momentjs将系统日期转换为ISO格式

15

我正在试图使用momentjs将系统日期按以下方式转换为ISO格式

2015-02-17T19:05:00.000Z 

然而我无法找到需要使用的参数来以我想要的格式获取它。 我尝试了下面的代码...

moment().format("YYYY-MM-DD HH:mm Z");

我得到的输出是2015-02-02 17:24+05:30。

如何将其转换为2015-02-02T17:24:00.000Z?


2
你根本不需要moment.js,可以使用内置的Date.prototype.toISOString。对于像IE 8这样的旧浏览器,MDN上有一个polyfill - RobG
1个回答

40

这在文档中已经很详细地介绍了。但是由于文档篇幅较长,以下是具体内容:

不知何故,moment.js对ISO 8601的定义与ECMAScript的定义不同,因此它没有内置。格式为YYYY-MM-DDTHH:mm:ss.sssZ,必须使用UTC时间(Z表示)。

所以,moment().utc()确保时区正确。

然后通过format进行格式化:

moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSS[Z]");
// 2015-02-02T21:38:04.092Z

Z是通过使用方括号进行转义的。我们可以安全地这样做,因为我们强制使用UTC。

其余字符根据格式表表示各种时间元素。


你也可以像RobG所说的那样使用本地日期对象。如果您从moment开始:

moment().toDate().toISOString( )
// 2015-02-02T21:40:06.395Z

2
天哪,终于我得到了ISO的格式,用于时间点YYYY-MM-DDTHH:mm:ss.SSS[Z] - Nagaraj Tantri
感谢:这是因为toISOString()不适用于moment-timezone。 - DonFabiolas
@slicedtoad 遇到了类似的问题,使用您的方法可以将日期转换为ISO格式,但是并没有返回正确的日期 - 例如,如果我要转换的日期是05-04-2019格式为dd-mm-yyyy,则它会将其转换为2019-04-07T22:29:06.754Z,这不是一个正确的日期,可能出了什么问题?这是我使用它的方式 ----const stringinv = retreive.data.v_invoice_date, --let mmtinv = moment().utc(invoice).format("YYYY-MM-DDTHH:mm:ss.SSS[Z]") - anglrlearner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接