在查看几个日期字符串后,是否有编程方式来识别日期格式?

is there programmatic way to identify date format after reviewing few date strings?

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

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 中寻找解决方案,如果你可以使用 momentjsdate-fns 指出我的解决方案,那很好。

提前谢谢你。

如评论所述,可以使用momentjs Parse Date Format插件

本插件添加parseFormat方法:

That allows to create smart date inputs that let your users set a Date/Time and lets you extract the user's preferred format for future usage.

parseFormat 方法接受 preferredOrder 选项来自定义模糊输入的插件结果。您可以使用 preferredOrder 和您自己的逻辑来获得您想要的结果。

这里是一个函数示例,该函数 returns 数组中最 频繁 的格式,使用默认 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: 
        .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>