我有一个用户插入日期的表单 (编辑:输入被复制为表单文档“因为它”因此格式化我的变化)
“2012 12 01”
“2012年12月1日”
“2012年12月1日”
“2012年1月15日”
还有一些不友好(但快速输入!)输入如:
“01122012”// 01 12 2012
“011212”// 01 12 2012
输入格式没有固定,所以我应该从我得到的东西中得到麻烦...
当然有一些优先事项:
“12.12.12”应解析为 yy.mm.dd IF VALID,或 dd.mm.yy 作为第二选项。
大多数准备好的功能都使用“正确格式化”的内容..所以我需要一个算法 (或其他语言中解析器的良好示例代码)
答案 0 :(得分: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块中。