Есть ли программный способ определить формат даты после просмотра нескольких строк даты? - PullRequest
0 голосов
/ 06 декабря 2018

Допустим, у меня есть массив строк с датами,

const a = ["11/23/2018","10/22/1992","02/02/1993","01/01/1990",...];
const b = ["12/01/2018","12/12/1992","24/09/1993","16/01/1990",...];

есть способ идентифицировать формат данных каждого из этих массивов, например,

a => MM/DD/YYYY
b => DD/MM/YYYY

в javascript.Я не ищу решения в vanila javascript, если вы можете указать мне на решение, используя momentjs или date-fns Это было бы хорошо.

заранее спасибо.

1 Ответ

0 голосов
/ 06 декабря 2018

Как указано в комментариях, вы можете использовать момент Формат даты анализа плагин.

Этот плагин добавляет метод parseFormat:

Это позволяет создавать интеллектуальные вводы даты, которые позволяют вашим пользователям устанавливать дату / время, и позволяет извлекать предпочтительный формат пользователя для будущего использования.

parseFormat метод принимает preferredOrder опции для настройки результатов плагина для неоднозначных входов.Вы можете использовать preferredOrder и свою собственную логику, чтобы получить желаемый результат.

Вот пример функции, которая возвращает наиболее частый формат в массиве с извлечением по умолчанию parseFormatповедение:

const a = ["11/23/2018","10/22/1992","02/02/1993","01/01/1990"];
const b = ["12/01/2018","12/12/1992","24/09/1993","16/01/1990"];

function getFormat(arr){
  return arr.map((elem) => moment.parseFormat(elem))
       // get most frequent element from here: https://stackoverflow.com/a/20762713/4131048
        .sort((a,b) =>
          arr.filter(v => v===a).length
        - arr.filter(v => v===b).length
        ).pop();
}

console.log( getFormat(a) );
console.log( getFormat(b) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>
<script src="https://gr2m.github.io/moment-parseformat/moment-parseformat.js"></script>
...