我从服务器 yyyyMMdd:hhmmss
获取此格式的 Date
作为 String
。
是否有一种通用方法可以将此字符串格式化为 Date
对象?
编辑
formatDate = (data) => {
return data.slice(6, 8) + "." + data.slice(4, 6) + "." + data.slice(0, 4) + " " + data.slice(9, 11) + ":" + data.slice(11, 13)
}
最佳答案
重新格式化字符串的方式很好,尽管看起来像是一个小工作需要很多代码,但 slice 速度相当快。一些替代方案(不一定“更好”,只是不同):
// Reformat yyyyMMdd:hhmmss as dd.mm.yyyy hh:mm:ss
function formatMatch(s) {
let b = s.match(/\d\d/g) || [];
return `${b[3]}.${b[2]}.${b[0]}${b[1]} ${b[4]}:${b[5]}:${b[6]}`;
}
function formatReplace(s) {
return s.replace(/(\d{4})(\d{2})(\d{2}):(\d{2})(\d{2})(\d{2})/, '$3.$2.$1 $4:$5:$6');
}
formatDate = (data) => {
return data.slice(6, 8) + "." + data.slice(4, 6) + "." + data.slice(0, 4) + " " + data.slice(9, 11) + ":" + data.slice(11, 13)
}
let s = '20200323:123445';
console.log(formatDate(s));
console.log(formatMatch(s));
console.log(formatReplace(s));
如果您想获取实际的 Date 对象,则无需使用这些位来创建另一个字符串,只需将它们传递到构造函数即可:
// Parse yyyyMMdd:hhmmss to Date object
function parseD(s) {
let b = s.match(/\d\d/g) || [];
return new Date(b[0]+b[1], b[2]-1, b[3], b[4], b[5], b[6]);
}
let s = '20200327:134523';
console.log(parseD(s).toString());
||的使用[]
表示如果没有匹配项,则返回一个空数组,因此所有 b[*]
项都返回 undefined 并且结果是无效日期。
上面使用了match,但是slice或substring也可以以同样的方式使用。
关于javascript - 如何在 React Native 中将字符串格式化为日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60816624/