我想在html中使用自动格式化来构建输入日期。例如,如果我写'1994年12月1日''或者' 12/1/1994'它会自动检测到它是一个约会并重新格式化:' 12.1.1994'并创建一个日期对象:确切地说是excel。
我不想自己构建它因为它看起来太复杂而且选项太多所以你知道任何解决方案吗?
答案 0 :(得分:2)
这是复杂的函数,应该将许多常见的日期字符串转换为日,月和年整数。这肯定有一些弱点,所以可以随意评论任何错误或想法升级。
这个脚本背后的想法是:
代码:
var el = document.getElementById("date_input"),
reg_day = /\d{1,2}(st|nd|rd|th)/i,
reg_month = /(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i.
reg_year = /^\d{4}$/;
此函数将前导零(如有必要)添加到日期或月份整数(返回字符串)
代码:
function addZero(num) {
var s = num.toString();
while (s.length < 2) s = "0" + s;
return s;
}
代码:
function getMonth(month) {
if(month.search(reg_month) > -1) {
var month_name = month.match(reg_month)[0];
return new Date(Date.parse(month_name + " 1, 2000")).getMonth() + 1;
} else if(month.search(/^(0?[1-9]|1[0-2])$/) > -1) {
return parseInt(month);
}
return null;
}
代码:
function getDay(day) {
day = day.replace(/\D+/g, "")
if(day.search(/^(0?[1-9]|[12][0-9]|3[01])$/) > -1) {
return parseInt(day);
}
return null;
}
代码:
function getYear(year) {
if(year.search(reg_year) > -1) {
return parseInt(year);
}
return null;
}
代码:
el.onblur = function(){
var val = el.value,
array = val.replace(/[^A-Za-z0-9]/g, " ").replace(/ +(?= )/g, "").split(" "),
data_not_used = [],
day = null, month = null, year = null;
// fn continues below
否则将数组索引添加到 data_not_used
(更多在变量部分以及getDay,getMonth和getYear函数中)
代码:
// fn continues above
for(var i=0; i < array.length; i++) {
if(array[i].search(reg_day) > -1) {
day = getDay(array[i]);
} else if(array[i].search(reg_month) > -1) {
month = getMonth(array[i]);
} else if(array[i].search(reg_year) > -1) {
year = getYear(array[i]);
} else {
data_not_used.push(i);
}
}
// fn continues below
代码:
// fn continues above
if(data_not_used.length > 1) {
if(array[0].search(/\d{4}/) > -1) {
year = getYear(array[0]);
month = getMonth(array[1]);
day = getDay(array[2]);
} else {
month = getMonth(array[0]);
day = getDay(array[1]);
year = getYear(array[2]);
}
}
else if(data_not_used.length === 1) {
var data = array[data_not_used[0]];
if(day === null) day = getDay(data);
else if(month === null) month = getMonth(data);
else if(year === null) year = getYear(data);
}
// fn continues below
代码:
// fn continues above
if(day!==null && month!==null && year!==null) {
console.log(addZero(month) + "/" + addZero(day) + "/" + year);
} else {
console.error("Date not valid: " + month + "/" + day + "/" + year);
}
};
不要忘记关闭 onblur()功能!希望这很有用;)