假设我从 api 收到一个日期,格式为: 20191116T202021.000Z
但不幸的是我无法在 JavaScript 中解析这些数据:
var dateToParse = "20191116T202021.000Z"
var dateFormat = "YYYYMMDD'T'HHmmss.sss'Z'"
var test = Date.parse(dateToParse, dateFormat)
console.log(test)
我想要实现的是用这个 dateToParse 日期减去当前日期,并查看秒、分钟和天的差异。
最佳答案
Date.parse 没有第二个参数支持。相反,通过插入缺少的分隔符将输入字符串转换为 ISO 格式:
var dateToParse = "20191116T202021.000Z";
var test = Date.parse(dateToParse.replace(/(....)(..)(..T..)(..)/, "$1-$2-$3:$4:"));
console.log(test); // output as milliseconds
console.log(new Date(test).toJSON()); // output also in JSON format
如下所述,上面的正则表达式已经完成了将字符串解析为其日期部分的工作,因此您不妨将这些部分传递给 Date.UTC
而无需构建另一个需要解析的字符串再次。它只需要对月份数字进行一点调整:
var dateToParse = "20191116T202021.000Z";
var parts = dateToParse.match(/(....)(..)(..)T(..)(..)(..)\.(...)Z/);
var test = Date.UTC(parts[1], parts[2]-1, parts[3], parts[4], parts[5], parts[6], parts[7]);
console.log(test); // output as milliseconds
console.log(new Date(test).toJSON()); // output also in JSON format
为了提高效率,您只需将字符串切成固定大小的片段,而不使用花哨的正则表达式:
var dateToParse = "20191116T202021.000Z";
var test = Date.UTC(dateToParse.slice(0,4),
dateToParse.slice(4,6)-1,
dateToParse.slice(6,8),
dateToParse.slice(9,11),
dateToParse.slice(11,13),
dateToParse.slice(13,15),
dateToParse.slice(16,19));
console.log(test); // output as milliseconds
console.log(new Date(test).toJSON()); // output also in JSON format
关于javascript - 解析日期 YYYYMMDD'T'HHmmss.sss'Z',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899791/