是否有可能根据数组中的信息实现一种“猜测”这种日期格式的方法?

时间:2012-02-15 08:33:06

标签: javascript date-format

在JavaScript语言中,

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

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

是否有可能实现一种方法来猜测"这个日期格式基于数组中的信息,可能会建议用户最有可能使用哪种日期格式?如... DD / MM / YYYY

2 个答案:

答案 0 :(得分:1)

当然,如果数据恰好包含大于12的日期值并且具有四位数年份(如您引用的数据那样),那么您不能猜测,您可以确定您已经拥有正确的格式。

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

所以不,你不能可靠地推断一般情况下的格式。数据来源应提供格式信息(在文档中等),理想情况下使用不太模糊的格式,如YYYY / MM / DD。

答案 1 :(得分:1)

在某种程度上,是的,您可以。一种明显的方法是使用正则表达式。假设您有一个日期,例如2020-10-31,则可以针对RegExp对其进行测试,提取令牌(年,月和日),一旦令牌被识别,您就可以map将其转换为相应的格式令牌(YYYY,MM和DD)。

现在考虑使用RegExp /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])$/;简而言之,它匹配格式为(4位数字的年)-(月,可能)-(月的天,可能)的字符串;括号表示capture groups。此处的捕获组实际上将为您提取令牌(年,月和日中的月份部分)。试用以下代码段,

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。

但是请注意,如果日期不明确,则无法准确确定标记语义。考虑日期01/01/2020,它可以是DD / MM / YYYY或MM / DD / YYYY中的任何一个。尽管如此,该方法仍适用于标准日期时间格式(ISO 8601RFC 2822)。

详细参考资料:-

  1. Regular expressions
  2. Heremoment.js源代码的摘要,它满足您的要求,但仅适用于符合ISO 8601的日期
  3. Here是我写的一个程序包,考虑到歧义性,它也对其他格式也做同样的事情。