是否有可能实现一种“;猜测;此日期格式基于数组中的信息

Is it possible to implement a way to "guess" this date format based on the information in the array?

本文关键字:格式 于数组 数组 信息 日期 猜测 实现 有可能 一种 是否      更新时间:2023-09-26

在JavaScript语言中,

我有一个数组。。。也许它看起来像这个

var all_date = new Array( "11/12/2009", "31/12/2010", "29/12/2011", "17/09/2011" );

是否可以实现一种方法,根据数组中的信息"猜测"此日期格式,并可能向用户建议最有可能的日期格式?例如年月日

当然,如果数据恰好包含大于12的日期值,并且年份为四位数(正如您引用的数据所做的那样),您不会猜测,您可以确定您的格式是正确的。

但是,如果数据中的所有日期值都是12或更低,则无法确定数据是美国MM/DD/YYYY格式还是更常见的DD/MM/YYYY格式。

因此,不,在一般情况下,您不能可靠地推断格式。数据源应提供格式信息(在文档等中),最好使用不太模糊的格式,如YYYY/MM/DD。

嗯,在某种程度上,是的,你可以。一个显而易见的方法是使用正则表达式。假设你有一个日期,比如2020-10-31,你可以用RegExp测试它,提取令牌(年、月和月),一旦标识了令牌,你就可以将它们映射到相应的格式令牌(YYYY、MM和DD)。

现在考虑RegExp,/^('d{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]'d|3[0-1])$/;简单地说,它匹配形式为(4位数字的年份)-(月份,也许)-(月日,也许)的字符串;括号表示捕获组。在这里捕获组,基本上会为您提取代币(年、月和月中日部分)。试试下面的片段,

console.log('2020-10-31'.match(/^('d{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]'d|3[0-1])$/));

一旦标识了令牌,就可以很容易地构造格式字符串YYYY-MM-DD。

不过,请注意,如果日期不明确,则无法准确确定令牌语义。考虑2020年1月1日,它可以是DD/MM/YYYY或MM/DD/YYYY中的任何一个。尽管如此,该方法对于标准日期-时间格式(ISO8601和RFC2822)来说效果非常好。

详细参考:-

  1. 正则表达式
  2. 以下是moment.js源代码的一个片段,它可以满足您的要求,但仅适用于符合ISO 8601的日期
  3. 这是我写的一个包,它对其他格式也做了同样的事情,解释了歧义