你的日期是怎么输入的呢:
<input type =text name = mon onchange=check(this)>
<input type =text name = day >
<script language = javascript>
function check(id) //判断月份输入是否正确函数
{
if (id.value =='')
{
alert("please enter character!");
id.focus();
return false;
}
dights='0123456789';
for (i=1 ;i<=id.value.length;i++)
{
if (dights.indexOf(id.value.substr(i,1))==-1)
{
alert('只能输入数字');
id.value ='';
id.focus();
return false;
}
}
if ((id.value>12)||(id.value<1))
{
alert("月份输入错误!");
id.value = '';
id.focus();
return false;
}
}
</script>
判断日的自己按照上面应该可以写出来
<input type =text name = mon onchange=check(this)>
<input type =text name = day >
<script language = javascript>
function check(id) //判断月份输入是否正确函数
{
if (id.value =='')
{
alert("please enter character!");
id.focus();
return false;
}
dights='0123456789';
for (i=1 ;i<=id.value.length;i++)
{
if (dights.indexOf(id.value.substr(i,1))==-1)
{
alert('只能输入数字');
id.value ='';
id.focus();
return false;
}
}
if ((id.value>12)||(id.value<1))
{
alert("月份输入错误!");
id.value = '';
id.focus();
return false;
}
}
</script>
判断日的自己按照上面应该可以写出来
function CheckDateTime(str){
var reg = /^(\d+)-(\d{1,2})-(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
r[2]=r[2]-1;
var d= new Date(r[1], r[2],r[3]);
if(d.getFullYear()!=r[1])return false;
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
return true;
}
alert(CheckDateTime("2003-5-23"))
alert(CheckDateTime("2003-5-32"))
</script>
<input type =text name=d value="2003-5-23" onblur="vbscript:alert(isDate(f.d.value))">
</form>
直接用isdate吧
不过它是VBS的,
不是JS在ASP里,都比较好用的,
难题不在于格式的判断 主要是 闰月的 判断 ^_^
var yy=strDate.substring(0,4);
var mm=strDate.substring(5,7);
var dd=strDate.substring(8,10);
if(!isPosInteger(yy) || !isPosInteger(mm) || !isPosInteger(dd)){
return false
}
if(parseInt(yy,10)<1900 || parseInt(yy,10)>2050){
return false
}
if(parseInt(mm,10)<1 || parseInt(mm,10)>12){
return false
}
var dPrevDate = new Date(yy, mm, 0);
var maxd=dPrevDate.getDate();
if(parseInt(dd,10)<1 || parseInt(dd,10)>maxd){
return false
}
return true
}
{
var lthdatestr
if (datestr != '')
lthdatestr= datestr.length ;
else
lthdatestr=0; if (Dilimeter=='' || Dilimeter==null)
Dilimeter = '/'; var tmpy='';
var tmpm='';
var tmpd='';
//var datestr;
var status;
status=0;
if ( lthdatestr== 0)
return true;
for (i=0;i<lthdatestr;i++)
{
if (datestr.charAt(i)== Dilimeter) {status++; }
if (status>2) { return false; }
if ((status==0) && (datestr.charAt(i)!='/')) { tmpy=tmpy+datestr.charAt(i) }
if ((status==1) && (datestr.charAt(i)!='/')) { tmpm=tmpm+datestr.charAt(i) }
if ((status==2) && (datestr.charAt(i)!='/')) { tmpd=tmpd+datestr.charAt(i) }
}
year=new String (tmpy);
month=new String (tmpm);
day=new String (tmpd)
if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2)) { return false; }
if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) ) { return false; }
if (!((year % 4)==0) && (month==2) && (day==29)) { return false; }
if ((month<=7) && ((month % 2)==0) && (day>=31)) { return false; }
if ((month>=8) && ((month % 2)==1) && (day>=31)) { return false; }
if ((month==2) && (day==30)) { return false; }
return true;
}
function isdate(strDate){
var strSeparator = "-"; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
var intDay;
var boolLeapYear; strDateArray = strDate.split(strSeparator); if(strDateArray.length!=3) return "false"; intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
intDay = parseInt(strDateArray[2],10); if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return "false"; if(intMonth>12||intMonth<1) return "false"; if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return "false"; if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return "false"; if(intMonth==2){
if(intDay<1) return "false"; boolLeapYear = false;
if((intYear%100)==0){
if((intYear%400)==0) boolLeapYear = true;
}
else{
if((intYear%4)==0) boolLeapYear = true;
} if(boolLeapYear){
if(intDay>29) return "false";
}
else{
if(intDay>28) return "false";
}
} return "true";
}//自动增加'-'用于日期input输入框
function add_sign(field) {
if (field.value.length==4){
field.value= field.value+"-"
}
if (field.value.length==7){
field.value = field.value+"-"
}
if (field.value.length==10 ){
if (isdate(field.value)=="false"){
field.value ="";
field.focus();
window.alert ("日期格式不对!(YYYY-MM-DD)");
}
if (isdate(field.value)!="false"){
getNextElement(field).focus();
}
}
}//自动跳转到下一个输入框
function getNextElement (field) {
var form = field.form;
for (var e = 0; e < form.elements.length; e++)
if (field == form.elements[e])
break;
return form.elements[++e % form.elements.length];
}
function outday(year,month){
date=year+"-"+month+"-"+"31"
if (isdate(date)=="true"){
return 31;}
else {
date=year+"-"+month+"-"+"30"
if (isdate(date)=="true"){
return "30";}
else {
date=year+"-"+month+"-"+"29"
if (isdate(date)=="true"){
return "29";}
else
return "28";
}
}
}
//返回两个时间的天数:要求比较的时间的格式为:YYYY-MM-DD
function better_time(strDateStart,strDateEnd){
var strSeparator = "-"; //日期分隔符
var strDateArrayStart;
var strDateArrayEnd;
var intDay
strDateArrayStart = strDateStart.split(strSeparator);
strDateArrayEnd = strDateEnd.split(strSeparator);
var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
intDay = (strDateS-strDateE)/(1000*3600*24)
return intDay
}
不是日期将返回加(false),成功则返回日期对象。
若需严格的考察该日期对象是否与输入的一致,可参照楼上fason(【阿信(你是我的温柔)】) 的回复,逐个比较日期成分/*** 简单的日期检查,成功返回日期对象 ***/
String.prototype.isDate = function() {
var p;
var re1 = /(\d{4})[年./-](\d{1,2})[月./-](\d{1,2})[日]?$/;
var re2 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{2})[年]?$/;
var re3 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{4})[年]?$/;
if(re1.test(this)) {
p = re1.exec(this);
return new Date(p[1],p[2],p[3]);
}
if(re2.test(this)) {
p = re2.exec(this);
return new Date(p[3],p[1],p[2]);
}
if(re3.test(this)) {
p = re3.exec(this);
return new Date(p[3],p[1],p[2]);
}
return false;
}