1

我有一个用户插入日期的表单(编辑:输入是“按原样”复制表单文档,因此格式不同)

《2012 年 12 月 1 日》

“2012-12-01”

《2012.12.01》

“01.15.2012”

还有一些不友好的(但打字速度很快!)输入,如:

“01122012” // 2012 年 1 月 12 日

“011212” // 2012 年 1 月 12 日

输入格式不是固定的,所以我应该把我得到的东西弄得一团糟......

当然有一些优先级:

"12.12.12" 应该被解析为yy.mm.dd IF VALID,或者dd.mm.yy作为第二个选项。

大多数现成的函数都适用于“格式正确”的内容..所以我需要一个算法(或其他语言中解析器的良好示例代码)

4

1 回答 1

1

您可以“直接”执行此操作,例如:

var dateString; // user input date
if(dateString.split(" ").length == 3){
    // you have "yyyy mm dd" format
} else if(dateString.split("-").length == 3){
    // you have yyyy-mm-dd format
} else if(dateString.split(".").length == 3){
    // you have "yyyy.mm.dd" or "mm.dd.yyyy" format
} else {
    // suppose you have "yyyymmdd" or "mmddyyyy" format
}

在您可以有两种不同格式的情况下,您必须检查日、年和月值是否为有效年份。如果是这样,您可以建立日期,否则尝试其他方式。

对于 yyyymmdd 和 mmddyyyy 组合,您可以使用substr()字符串上的函数来提取日、年和月。

但是,您始终必须考虑到用户输入可能不正确,例如“2012 年 3 月 12 日”或“abcdefg”,但我只是将整个功能包装到一个 try-catch 块中。

于 2013-02-07T13:29:55.230 回答