如何在moment.js中将date格式化为ISO 8601?
这个文档提到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?
var date = moment(); date.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
),毫秒级并保持时区偏移量。
我开了一个问题,因为我认为这可能会导致意想不到的结果。
使用不带参数的format
:
var date = moment(); date.format(); // "2014-09-08T08:02:17-05:00"
也可以用香草JS
new Date().toISOString() // "2017-08-26T16:31:02.349Z"
如果您只想要date部分(例如2017-06-27),并且您希望它能够工作而不pipe时区和阿拉伯语,下面是我写的代码:
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 }