0

假设我有一个日期字符串数组,

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它会很好。

先感谢您。

4

1 回答 1

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://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>

于 2018-12-06T16:07:56.687 回答