是否有一种快速方法可以验证此格式的日期/时间是否有效? 我宁愿不用子串将其分解并尽可能重建它
“YYYY-MM-DD HH:MM:SS”
答案 0 :(得分:6)
您可以将日期字符串解析为ISO字符串(通过将空格转换为“T”并附加Zulu时区,例如“2011-08-16T12:34:56Z
”),然后将生成日期的ISO字符串与原始ISO字符串进行比较
function isValidDateString(s) {
try {
var isoStr = (""+s).replace(/ /,'T') + "Z"
, newStr = new Date(isoStr).toISOString();
return isoStr.slice(0,19) == newStr.slice(0,19);
} catch (e) {
return false;
}
}
这样,如果日期字符串的格式无效,那么字符串“Invalid Date”将不等于原始字符串,如果它要滚动(例如,如果该日当天无效)那么解析的字符串值date不会等于原始字符串。
<强> [编辑] 强>
请注意时区修复所需的示例代码的更改。
答案 1 :(得分:0)
尝试像this这样的正则表达式。 编辑:这是您想要匹配的字符串:
^([1-3][0-9]{3,3})-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2][1-9]|3[0-1])\s([0-1][0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9])$
答案 2 :(得分:0)
您可以使用this regex。
/^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$/.test("2007-08-04 18:01:01"); //true
/^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$/.test("2007-08-04 18:01:0"); //false
答案 3 :(得分:0)
以下代码将检查日期输入是否实际上是有效日期。
乍一看它看起来很大,但主要是评论。
它不需要子串,也不需要正则表达式。
JavaScript
的工作方式是,如果将具有无效日期(Date
)的04/32/2010
对象分解为总毫秒,然后创建另一个Date
对象使用这些毫秒,它不会创建显示错误日期(Date
)的04/32/2010
对象,它将补偿并创建正确的Date
(05/01/2010
)。
简单地说,如果输入与新的 Date
对象不同,则日期无效。
http://jsfiddle.net/dceast/vmHjN/ - 这是JSFiddle的一个例子。
var compareDate, checkDates = false;
var validateObject = {
init: function(year, month, day) {
return this.compareDate.init(year, month, day);
},
compareDate: {
init: function(year, month, day) {
var isValid = false;
// Compensate for zero based index, if month was not
// subtracted from one 0 === Jan, 1 === Feb, 2 === Mar
month -= 1;
// Create a new date object with the selected
// year, month, and day values and retrieve the
// milliseconds from it.
var mSeconds = (new Date(year, month, day)).getTime();
var objDate = new Date();
// Set the time of the object to the milliseconds
// retrieved from the original date. This will
// convert it to a valid date.
objDate.setTime(mSeconds);
// Compare if the date has changed, if it has then
// the date is not valid
if (objDate.getFullYear() === year &&
objDate.getMonth() === month &&
objDate.getDate() === day)
{
isValid = true;
}
return isValid;
}
}
};
答案 4 :(得分:0)
我这样做了并且有效
<html>
<head>
<title>valida data</title>
<script>
function valData(data){//dd/mm/aaaa
day = data.substring(0,2);
month = data.substring(3,5);
year = data.substring(6,10);
if( (month==01) || (month==03) || (month==05) || (month==07) || (month==08) || (month==10) || (month==12) ) {//months 31 days
if( (day < 01) || (day > 31) ){
alert('invalid date');
}
} else
if( (month==04) || (month==06) || (month==09) || (month==11) ){//months 30 days
if( (day < 01) || (day > 30) ){
alert('invalid date');
}
} else
if( (month==02) ){//February and leap year
if( (year % 4 == 0) && ( (year % 100 != 0) || (year % 400 == 0) ) ){
if( (day < 01) || (day > 29) ){
alert('invalid date');
}
} else {
if( (day < 01) || (day > 28) ){
alert('invalid date');
}
}
}
}
</script>
</head>
<body>
<form>
<input type="text" name="data" id="data" onBlur="return valData(this.value)" />
</form>
</body>
</html>