Как отформатировать строку для даты в React Native? - PullRequest
0 голосов
/ 23 марта 2020

Я получаю Date как String в этом формате с сервера yyyyMMdd:hhmmss.

Есть ли общий c способ форматирования этой строки в Date объекте?

РЕДАКТИРОВАТЬ

 formatDate = (data) => {
    return data.slice(6, 8) + "." + data.slice(4, 6) + "." + data.slice(0, 4) + " " + data.slice(9, 11) + ":" + data.slice(11, 13)
}

1 Ответ

1 голос
/ 24 марта 2020

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

...