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