如何获取指定格式的ISO8601 UTC日期?Moment.js使用疑问
解决你的moment.js UTC日期格式问题
一、获取目标UTC格式的方法
你当前代码生成的是本地时区的ISO格式(带+02:00偏移),要得到UTC时区且带Z后缀的格式,需要调整moment的时区模式:
生成标准ISO8601 UTC格式(带Z)
切换到UTC模式后,自定义格式输出(不带毫秒):// 当前UTC时间 let time1 = moment().utc().format('YYYY-MM-DDTHH:mm:ss[Z]'); // 一年后的UTC时间 let time2 = moment().add(1, 'year').utc().format('YYYY-MM-DDTHH:mm:ss[Z]');输出示例:
2018-04-23T13:52:47Z,这是标准的ISO8601 UTC格式。如果你能接受毫秒,可以直接用moment内置的
toISOString()方法:let time1 = moment().utc().toISOString(); // 输出:2018-04-23T13:52:47.123Z对冒号进行URL编码
你期望的2015-07-13T22%3A00%3A00Z是把格式中的冒号做了URL编码(:→%3A),有两种实现方式:- 用
encodeURIComponent处理整个字符串(会编码所有URL特殊字符):let time1Encoded = encodeURIComponent(moment().utc().format('YYYY-MM-DDTHH:mm:ss[Z]')); - 手动替换冒号(仅编码冒号):
let time1 = moment().utc().format('YYYY-MM-DDTHH:mm:ss[Z]'); let time1Encoded = time1.replace(/:/g, '%3A');
两种方式都会得到你想要的编码后格式。
- 用
二、关于格式是否属于ISO8601 UTC的说明
- 原始的
2015-07-13T22:00:00Z是完全符合ISO8601 UTC规范的:Z是ISO8601中表示UTC时区的标准标记,等同于+00:00偏移。 - 编码后的
2015-07-13T22%3A00%3A00Z只是这个标准格式的URL安全版本,编码操作是为了避免冒号在URL中引发解析问题,其本质的时间表示仍然符合ISO8601 UTC的要求。
内容的提问来源于stack exchange,提问作者user8608046
相关产品推荐
相关产品推荐

