Преобразование строки даты в формате (дд-мм-гггг ЧЧ: мм: сс) в (мм-дд-гггг ЧЧ: мм: сс) с небольшим кодом? - PullRequest
0 голосов
/ 11 января 2020

Было много подобных вопросов, но ни один не получил правильный / удовлетворительный ответ.

Я получаю дату в формате строки, например: "21-5-2017 10:45:20", но я должен использовать Date.parse() для получения значений, таких как 15046000 но проблема в том, что формат даты принимается только как mm-dd-YYYY, а не dd-mm-YYYY Так может кто-нибудь помочь мне с небольшим кодом?

Date.parse(date) = NaN //Getting this output

1 Ответ

0 голосов
/ 12 января 2020

Синтаксический анализ строк с помощью встроенного синтаксического анализатора настоятельно не рекомендуется, даже для двух форматов, поддерживаемых ECMA-262.

Анализ строки для формирования другой (возможно, совместимой с ECMA-262) строки, которая затем анализируется встроенный синтаксический анализатор также не имеет смысла, не в последнюю очередь потому, что старые реализации могут не поддерживать текущие форматы ECMAScript. Разбор неподдерживаемых форматов означает использование зависимого от реализации поведения, что чревато. Следующее возвращает недопустимую дату в некоторых браузерах, но не в других:

new Date('2017-05-21 10:45:20');

Проанализировав строку, гораздо надежнее передать детали конструктору даты напрямую. В качестве альтернативы используйте библиотеку, гарантирующую, что формат также передается анализатору, чтобы избежать его возврата к поведению, определяемому реализацией c. Например,

function customParse(s){
  let b = s.split(/\D/);
  return new Date(b[2], b[1]-1, b[0], b[3], b[4], b[5]); 
}

let s = "21-5-2017 10:45:20"

// Using custom parse function
console.log(customParse(s).toString());
// Using a library
console.log(fecha.parse(s, 'DD-M-YYYY HH:mm:ss').toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/fecha/2.3.3/fecha.min.js"></script>
...