Есть ли программный способ определить формат даты после просмотра нескольких строк даты?

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

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 ответ

Решение

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

Этот плагин добавить 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://stackru.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>

Другие вопросы по тегам