Set*_*can 67 javascript validation
我正在尝试测试,以确保日期是有效的,如果有人进入,2/30/2011
那么它应该是错误的.
我怎么能在任何日期这样做?
Rob*_*obG 122
验证日期字符串的一种简单方法是转换为日期对象并测试,例如
// Expect input as d/m/y
function isValidDate(s) {
var bits = s.split('/');
var d = new Date(bits[2], bits[1] - 1, bits[0]);
return d && (d.getMonth() + 1) == bits[1];
}
['0/10/2017','29/2/2016','01/02'].forEach(function(s) {
console.log(s + ' : ' + isValidDate(s))
})
Run Code Online (Sandbox Code Playgroud)
以这种方式测试日期时,只需要测试月份,因为如果日期超出范围,月份将会改变.如果月份超出范围,则相同.任何一年都有效.
您还可以测试日期字符串的位:
function isValidDate2(s) {
var bits = s.split('/');
var y = bits[2],
m = bits[1],
d = bits[0];
// Assume not leap year by default (note zero index for Jan)
var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// If evenly divisible by 4 and not evenly divisible by 100,
// or is evenly divisible by 400, then a leap year
if ((!(y % 4) && y % 100) || !(y % 400)) {
daysInMonth[1] = 29;
}
return !(/\D/.test(String(d))) && d > 0 && d <= daysInMonth[--m]
}
['0/10/2017','29/2/2016','01/02'].forEach(function(s) {
console.log(s + ' : ' + isValidDate2(s))
})
Run Code Online (Sandbox Code Playgroud)
Pio*_*tek 10
RobG提出的第一个函数isValidDate是否适用于输入字符串'1/2 /'?我想不是,因为YEAR没有经过验证;(
我的主张是使用此功能的改进版本:
//input in ISO format: yyyy-MM-dd
function DatePicker_IsValidDate(input) {
var bits = input.split('-');
var d = new Date(bits[0], bits[1] - 1, bits[2]);
return d.getFullYear() == bits[0] && (d.getMonth() + 1) == bits[1] && d.getDate() == Number(bits[2]);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我建议使用moment.js.只提供日期到时间将验证它,不需要传递dateFormat.
var date = moment("2016-10-19");
Run Code Online (Sandbox Code Playgroud)
然后date.isValid()
给出期望的结果.
Se发布在这里
归档时间: |
|
查看次数: |
129955 次 |
最近记录: |