То, как вы переформатируете строку, прекрасно, хотя для небольшой работы кажется, что кода много, 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 можно использовать таким же образом.