var str = '20190331T141553Z'
function timeFromString(str){
var t = [str.substring(0,4),'-', str.substring(4,6),'-',
str.substring(6,8), 'T', str.substring(9,11), ':',
str.substring(11,13), ':',
str.substring(13,15)].join(',').replace(/,/g,'');
return new Date(t);
}
timeFromString(str);
// 2019-03-31T18:15:53.000Z
Или вы можете использовать регулярное выражение:
function dateFromString(str){
var regex = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/;
return new Date(str.replace(regex, "$1-$2-$3T$4:$5:$6"));
}
Чтобы объяснить регулярное выражение:
// ^ means start of string
// (\d{4}) capture group 1 is 4 digits (year)
// (\d{2}) capture group 2 is 2 digits (month)
// (\d{2}) capture group 3 is 2 digits (day)
// T just matches the T
// (\d{2}) capture group 4 is 2 digits (hours)
// (\d{2}) capture group 5 is 2 digits (minutes)
// (\d{2}) capture group 6 is 2 digits (seconds)
// now we can use the numbered capture groups to replace them in the string.
// they are auto-numbered by sequence.