我正在尝试在日期字段中添加自动斜杠。我希望日期格式为yyyy/mm/dd
我想自动添加斜线,在日期(最后一个数字(之后不允许键入数字。
我希望这个函数是纯javascript。
这是我的示例代码。
var date = document.getElementById('date');
function checkValue(str, max) {
if (str.charAt(0) !== '0' || str == '00') {
var num = parseInt(str);
if (isNaN(num) || num <= 0 || num > max) num = 1;
str = num > parseInt(max.toString().charAt(0))
&& num.toString().length == 1 ? '0' + num : num.toString();
};
return str;
};
date.addEventListener('input', function(e)
{
this.type = 'text';
var input = this.value;
if (/D/$/.test(input)) input = input.substr(0, input.length - 3);
var values = input.split('/').map(function(v) {
return v.replace(/D/g, '')
});
if (values[0]) values[0] = checkValue(values[0], 12);
if (values[1]) values[1] = checkValue(values[1], 31);
var output = values.map(function(v, i) {
return v.length == 2 && i < 2 ? v + ' / ' : v;
});
this.value = output.join('').substr(0, 14);
});
<input type="text" id="date">
在上述代码中,日期格式为mm/dd/yyyy。我想把它改成yyyy/mm/dd。
在建议的问题中,它只是打印日期。我想在开启功能期间完成
这样尝试:
var date = document.getElementById('date');
function checkValue(str, max) {
if (str.charAt(0) !== '0' || str == '00') {
var num = parseInt(str);
if (isNaN(num) || num <= 0 || num > max) num = 1;
str = num > parseInt(max.toString().charAt(0)) &&
num.toString().length == 1 ? '0' + num : num.toString();
};
return str;
};
date.addEventListener('input', function(e) {
this.type = 'text';
var input = this.value;
if (/D/$/.test(input)) input = input.substr(0, input.length - 3);
var values = input.split('/').map(function(v) {
return v.replace(/D/g, '')
});
if (values[1]) values[1] = checkValue(values[1], 12);
if (values[2]) values[2] = checkValue(values[2], 31);
var max = 4;
var output = values.map(function(v, i) {
if (v.length == max) {
max = 2;
return i < max ? v + ' / ' : v;
};
return v;
});
this.value = output.join('').substr(0, 14);
});
<input type="text" id="date">
当映射values
以设置output
时,应根据yyyy(4(长度检查第一个元素,并根据mm或dd(2(长度检查其他元素。最后,传递到checkValue
中的值的索引需要递增。