Javascript 日期验证 - 将 19(世纪)作为两位数日期的前缀
Javascript date validation - prefixing 19 (century) to two digit date
我正在用 Date()
做一些验证,我注意到如果我用两位数年份而不是四位数创建一个无效日期 Date(01/01/55)
那么当前世纪将作为前缀放在年份上- 55 变为 1955 - 而不是我可以用 NaN 测试的无效日期对象。
这是一个问题,因为我允许用户输入没有任何“/”的日期,然后我使用 substr
:
创建日期
// Check date is in correct format
var fDate = val.split('/');
// Should have 3 parts
if (fDate.length != 3) {
var day = val.substr(0, 2);
var month = val.substr(2, 2);
var year = val.substr(4, 4);
val = day + '/' + month + '/' + year;
control.val(val);
}
因此,如果用户输入 010155
,我的逻辑会将其变成 01/01/55
,然后 Date()
创建日期 01/01/1955
,但我希望它创建一个无效日期对象。
好吧,我开发了一个解决方案,可以满足我的需求。 momentjs.com 看起来很棒,我可能会使用它,但我使用的是 jqueryui.com Datepicker,它使用 Date
我希望使用能够输入没有年份的日期,1或 2 个年份,默认为本世纪初。
var cYear = new Date().getFullYear();
var c = cYear.toString().substr(0, 2);
day = val.substr(0, 2);
if (day > 31) {
leftOverD = day.charAt(1);
day = "0" + day.charAt(0);
} else if (day.length == 1) {
day = "0" + day;
} else if (day.length == 0) {
day = "01";
}
month = (leftOverD) ? leftOverD + val.charAt(2) : val.substr(2, 2);
if (month > 12) {
leftOverM = month.charAt(1);
month = "0" + month.charAt(0);
} else if (month.length == 1) {
month = "0" + month;
} else if (month.length == 0) {
month = "01";
}
var strYear;
if (leftOverD && leftOverM) {
strYear = val.substr(2, 4);
} else if (leftOverD || leftOverM) {
strYear = val.substr(3, 4);
} else if (!leftOverD && !leftOverM) {
strYear = val.substr(4, 4);
}
year = strYear;
if (year.length == 0) {
year = c + "00";
} else if (year.length == 1) {
var nYear = c + '0' + year;
if (nYear > cYear)
nYear = (c - 1) + '0' + year
year = nYear;
} else if (year.length == 2) {
var nYear = c + year;
if (nYear > cYear)
nYear = (c - 1) + year
year = nYear;
}
ps。在 JS 中处理日期是一场噩梦。为什么不简单地拥有一个接受文化的 Date()
构造函数?
我正在用 Date()
做一些验证,我注意到如果我用两位数年份而不是四位数创建一个无效日期 Date(01/01/55)
那么当前世纪将作为前缀放在年份上- 55 变为 1955 - 而不是我可以用 NaN 测试的无效日期对象。
这是一个问题,因为我允许用户输入没有任何“/”的日期,然后我使用 substr
:
// Check date is in correct format
var fDate = val.split('/');
// Should have 3 parts
if (fDate.length != 3) {
var day = val.substr(0, 2);
var month = val.substr(2, 2);
var year = val.substr(4, 4);
val = day + '/' + month + '/' + year;
control.val(val);
}
因此,如果用户输入 010155
,我的逻辑会将其变成 01/01/55
,然后 Date()
创建日期 01/01/1955
,但我希望它创建一个无效日期对象。
好吧,我开发了一个解决方案,可以满足我的需求。 momentjs.com 看起来很棒,我可能会使用它,但我使用的是 jqueryui.com Datepicker,它使用 Date
我希望使用能够输入没有年份的日期,1或 2 个年份,默认为本世纪初。
var cYear = new Date().getFullYear();
var c = cYear.toString().substr(0, 2);
day = val.substr(0, 2);
if (day > 31) {
leftOverD = day.charAt(1);
day = "0" + day.charAt(0);
} else if (day.length == 1) {
day = "0" + day;
} else if (day.length == 0) {
day = "01";
}
month = (leftOverD) ? leftOverD + val.charAt(2) : val.substr(2, 2);
if (month > 12) {
leftOverM = month.charAt(1);
month = "0" + month.charAt(0);
} else if (month.length == 1) {
month = "0" + month;
} else if (month.length == 0) {
month = "01";
}
var strYear;
if (leftOverD && leftOverM) {
strYear = val.substr(2, 4);
} else if (leftOverD || leftOverM) {
strYear = val.substr(3, 4);
} else if (!leftOverD && !leftOverM) {
strYear = val.substr(4, 4);
}
year = strYear;
if (year.length == 0) {
year = c + "00";
} else if (year.length == 1) {
var nYear = c + '0' + year;
if (nYear > cYear)
nYear = (c - 1) + '0' + year
year = nYear;
} else if (year.length == 2) {
var nYear = c + year;
if (nYear > cYear)
nYear = (c - 1) + year
year = nYear;
}
ps。在 JS 中处理日期是一场噩梦。为什么不简单地拥有一个接受文化的 Date()
构造函数?