在JavaScript语言中,
我有一个数组......也许它看起来像这样
var all_date = new Array( "11/12/2009", "31/12/2010", "29/12/2011", "17/09/2011" );
是否有可能实现一种方法来猜测"这个日期格式基于数组中的信息,可能会建议用户最有可能使用哪种日期格式?如... DD / MM / YYYY
答案 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 8601和RFC 2822)。
详细参考资料:-