博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript:时间日期格式验证大全
阅读量:4087 次
发布时间:2019-05-25

本文共 12992 字,大约阅读时间需要 43 分钟。

 * 校验是否为YYYY-MM-DD 日期格式

 * 校验是否为YYYY-MM-DD HH:mm 日期+时分格式
 * 校验是否为YYYY-MM-DD HH:mm:ss 日期+时分秒格
 * 校验是否为HH:mm:ss 时分秒格式
 * 校验是否为HH:mm 时分格

先看一个例子:

日期时间格式 时间:
下面是常用的一些时间日期格式验证Javascript代码:

// JavaScript Documentvar success = 'success';         //校验成功var failure = 'failure';         //校验失败var dateStrNull = 'dateStrNull'; //日期字符串为空var formatError = "formatError"; //不符合格式var lengthLt8 = "lengthLt8";     //长度小于8var monthLT1  = 'monthLT1';    //月份不能小于1var monthGT12 = 'monthGT12';   //月份大于12var dayGT28 = 'dayGT28';       //日期大于28var dayGT29 = 'dayGT29';       //日期大于29var dayGT30 = 'dayGT30';       //日期大于30var dayGT31 = 'dayGT31';       //日期大于31var dayLT1 = 'dayLT1';         //日期小于1var hour24System = '24';       //采用24小时制var hour12System = '12';       //采用12小时制var hourGT23 = 'hourGT23';     //小时大于23var hourGT11 = 'hourGT11';     //小时大于11var minuteGT59 = 'minuteGT59'; //分钟大于59var secondGT59 = 'secondGT59'; //秒钟大于59var dateCompare = 'date';   //比较年月日var dateTimeCompare = 'dateTime'; //比较年月日或者时分秒或者所有var timeCompare = 'time';   //比较年时分秒var dateTimeGTNow = 'dateTimeGTNow';  //大于当前年月日或者时分秒或者所有var dateTimeLTNow = 'dateTimeLTNow';  //小于当前年月日或者时分秒或者所有var equality = 'equality';       //时间相等//时间格式的正则表达式var YYYYMMDDReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}/g; var YYYYMMDDHHmmReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}\s[\d]{1,2}[:][\d]{1,2}/g;var YYYYMMDDHHmmssReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}\s[\d]{1,2}[:][\d]{1,2}[:][\d]{1,2}/g;var HHmmssReg = /[\d]{1,2}[:][\d]{1,2}[:][\d]{1,2}/g;var HHmmReg = /[\d]{1,2}[:][\d]{1,2}/g;/** * 校验是否为YYYY-MM-DD 日期格式 * @param dateStr 时间字符串 * @returns */function validateYYYYMMDD(dateStr){	//如果日期字符串为空	if(strIsNull(dateStr)){		return dateStrNull;	}		//如果小于8位	if(dateStr.length < 8){		return lengthLt8;	}		dateStr = addHRToStr(dateStr);		var regResult = dateStr.replace(YYYYMMDDReg,'');	//符合格式	if(regResult==''){		var line_one = dateStr.indexOf('-');       //获取第一个横-		var line_two = dateStr.lastIndexOf('-');   //获取第二个横-			var year_str = dateStr.substring(0,line_one);   //获取年		var month_str = dateStr.substring(line_one+1,line_two); //获取月		var day_str = dateStr.substring(line_two+1);  //获取日				//转换成数字格式 		var year_num = getIntValue(year_str);		var month_num = getIntValue(month_str);		var day_num = getIntValue(day_str);				//校验月份		var monthResult = validateMonth(month_num);		if(monthResult!=success){			return monthResult;		}				//如果日期小于1		if(day_num<1){			return dayLT1;		}		//校验日期		return validateDay(year_num,month_num,day_num);	}else{		return formatError;	}	return failure;}/** * 校验是否为YYYY-MM-DD HH:mm 日期+时分格式 * @param dateStr 时间字符串 * @param hourSys 小时制(默认24小时制) * @returns */function validateYYYYMMDDHHmm(dateStr,hourSys){	//如果日期字符串为空	if(strIsNull(dateStr)){		return dateStrNull;	}		//如果小时制为空,则设置为24小时制	if(strIsNull(hourSys)){		hourSys = hour24System;	}		var regResult = dateStr.replace(YYYYMMDDHHmmReg,'');	//符合格式	if(regResult==''){		var line_one = dateStr.indexOf('-');       //获取第一个横-		var line_two = dateStr.lastIndexOf('-');   //获取第二个横-		var space = dateStr.indexOf(' ');          //获取空格		var colon_one = dateStr.indexOf(':');  //获取第一个冒号		var year_str = dateStr.substring(0,line_one);   //获取年		var month_str = dateStr.substring(line_one+1,line_two); //获取月		var day_str = dateStr.substring(line_two+1,space);  //获取日		var hour_str = dateStr.substring(space+1,colon_one); //获取小时		var minute_str = dateStr.substring(colon_one+1);  //获取分钟				//转换成数字格式 		var year_num = getIntValue(year_str);		var month_num = getIntValue(month_str);		var day_num = getIntValue(day_str);		var hour_num = getIntValue(hour_str);		var minute_num = getIntValue(minute_str);				//校验月份		var monthResult = validateMonth(month_num);		if(monthResult!=success){			return monthResult;		}				//如果日期小于1		if(day_num<1){			return dayLT1;		}		//校验日期		var dayResult = validateDay(year_num,month_num,day_num);		if(dayResult!=success){			return dayResult;		}				//校验小时		var hourResult = validateHour(hour_num,hourSys);		if(hourResult!=success){			return hourResult;		}				return validateMinute(minute_num);	}else{		return formatError;	}	return failure;}/** * 校验是否为YYYY-MM-DD HH:mm:ss 日期+时分秒格式 * @param dateStr 时间字符串 * @param hourSys 小时制(默认24小时制) * @returns */function validateYYYYMMDDHHmmss(dateStr,hourSys){	//如果日期字符串为空	if(strIsNull(dateStr)){		return dateStrNull;	}		//如果小时制为空,则设置为24小时制	if(strIsNull(hourSys)){		hourSys = hour24System;	}		var regResult = dateStr.replace(YYYYMMDDHHmmssReg,'');	//符合格式	if(regResult==''){		var line_one = dateStr.indexOf('-');       //获取第一个横-		var line_two = dateStr.lastIndexOf('-');   //获取第二个横-		var space = dateStr.indexOf(' ');          //获取空格		var colon_one = dateStr.indexOf(':');      //获取第一个冒号		var colon_two = dateStr.lastIndexOf(':');  //获取第二个冒号				var year_str = dateStr.substring(0,line_one);   //获取年		var month_str = dateStr.substring(line_one+1,line_two); //获取月		var day_str = dateStr.substring(line_two+1,space);  //获取日				var hour_str = dateStr.substring(space+1,colon_one); //获取小时		var minute_str = dateStr.substring(colon_one+1,colon_two);  //获取分钟		var second_st = dateStr.substring(colon_two+1);  //获取分钟				//转换成数字格式 		var year_num = getIntValue(year_str);		var month_num = getIntValue(month_str);		var day_num = getIntValue(day_str);				var hour_num = getIntValue(hour_str);		var minute_num = getIntValue(minute_str);		var second_num = getIntValue(second_st);				//校验月份		var monthResult = validateMonth(month_num);		if(monthResult!=success){			return monthResult;		}				//如果日期小于1		if(day_num<1){			return dayLT1;		}		//校验日期		var dayResult = validateDay(year_num,month_num,day_num);		if(dayResult!=success){			return dayResult;		}				//校验小时		var hourResult = validateHour(hour_num,hourSys);		if(hourResult!=success){			return hourResult;		}				//校验分钟		var minuteResult = validateMinute(minute_num);		if(minuteResult!=success){			return minuteResult;		}				//校验秒		return validateSecond(second_num);	}else{		return formatError;	}	return failure;}/** * 校验是否为HH:mm:ss 时分秒格式 * @param dateStr 时间字符串 * @param hourSys 小时制(默认24小时制) * @returns */function validateHHmmss(dateStr,hourSys){	//如果日期字符串为空	if(strIsNull(dateStr)){		return dateStrNull;	}		//如果小时制为空,则设置为24小时制	if(strIsNull(hourSys)){		hourSys = hour24System;	}		var regResult = dateStr.replace(HHmmssReg,'');	//符合格式	if(regResult==''){		var colon_one = dateStr.indexOf(':');      //获取第一个冒号		var colon_two = dateStr.lastIndexOf(':');  //获取第二个冒号			var hour_str = dateStr.substring(0,colon_one); //获取小时		var minute_str = dateStr.substring(colon_one+1,colon_two);  //获取分钟		var second_st = dateStr.substring(colon_two+1);  //获取分钟				//转换成数字格式 		var hour_num = getIntValue(hour_str);		var minute_num = getIntValue(minute_str);		var second_num = getIntValue(second_st);		//校验小时		var hourResult = validateHour(hour_num,hourSys);		if(hourResult!=success){			return hourResult;		}				//校验分钟		var minuteResult = validateMinute(minute_num);		if(minuteResult!=success){			return minuteResult;		}				//校验秒		return validateSecond(second_num);	}else{		return formatError;	}	return failure;}/** * 校验是否为HH:mm 时分格式 * @param dateStr 时间字符串 * @param hourSys 小时制(默认24小时制) * @returns */function validateHHmm(dateStr,hourSys){	//如果日期字符串为空	if(strIsNull(dateStr)){		return dateStrNull;	}		//如果小时制为空,则设置为24小时制	if(strIsNull(hourSys)){		hourSys = hour24System;	}		var regResult = dateStr.replace(HHmmReg,'');	//符合格式	if(regResult==''){		var colon_one = dateStr.indexOf(':');      //获取第一个冒号		var hour_str = dateStr.substring(0,colon_one); //获取小时		var minute_str = dateStr.substring(colon_one+1);  //获取分钟				//转换成数字格式 		var hour_num = getIntValue(hour_str);		var minute_num = getIntValue(minute_str);		//校验小时		var hourResult = validateHour(hour_num,hourSys);		if(hourResult!=success){			return hourResult;		}				//校验分钟		return validateMinute(minute_num);	}else{		return formatError;	}	return failure;}/** * 添加横线到日期的格式 * @param oldStr * @returns {String} */function addHRToStr(oldStr){	//如果存在-或者/	if(oldStr.indexOf('-')>=0 || oldStr.indexOf('/')>=0){		return oldStr;	}		//如果小于6或者大于8	if(oldStr.length != 8 ){		return oldStr;	}		var idx1 = 4;	var idx2 = 6;		if(oldStr.length == 6){		idx2 = 5;	}else if(oldStr.length == 7){		idx2 = 6;	}		var newStr = oldStr.substring(0,4) + "-" + oldStr.substring(4,idx2) + "-" + oldStr.substring(idx2);	return newStr;}/** * 校验是否大于当前时间(自动检测传入的时间格式) * @param dateStr * @returns */function isMorethanNow(dateStr){	var result = 'equals';	//如果是YYYY-MM-DD	if(dateStr.replace(YYYYMMDDReg,'')==''){		result = compareNow(dateStr,dateCompare);			//如果是YYYY-MM-DD HH:mm:ss	}else if(dateStr.replace(YYYYMMDDHHmmssReg,'')==''){		result = compareNow(dateStr,dateTimeCompare);			//如果是YYYY-MM-DD HH:mm	}else if(dateStr.replace(YYYYMMDDHHmmReg,'')==''){		result = compareNow(dateStr+":59",dateTimeCompare);			//如果是HH:mm:ss	}else if(dateStr.replace(HHmmssReg,'')==''){		result = compareNow(dateStr,timeCompare);		//如果是HH:mm	}else if(dateStr.replace(HHmmReg,'')==''){		result = compareNow(dateStr+":59",timeCompare);	}	//如果大于	if(result == dateTimeGTNow){		return 'true';	}else if(result == dateTimeLTNow){		return 'false';	}else{		return 'equals';	}}/** * 比较当前的日期或者时间(日期,时间) * @param dateStr * @param compareType 比较方式 date,time,dateTime (默认比较年月日) */function compareNow(dateStr,compareType){	//如果比较方式为空	if(strIsNull(compareType)){		compareType = dateCompare;	}	//获取当前日期	var now = new Date();	//比较日期	if(compareType == dateCompare){		var nowDate = new Date(now.getFullYear()+'/'+(now.getMonth()+1)+'/'+now.getDate());		var fd_date = new Date(dateStr.replace(/-/g,'/'));				if(fd_date>nowDate){			return dateTimeGTNow;		}else if(fd_date
now){ return dateTimeGTNow; }else if(fd_date
nowTimeStr){ return dateTimeGTNow; }else if(dateStrNoSpace
12){ return monthGT12; }else if(month_num<1){ return monthLT1; } return success;}/** * 校验日期是否合法 * @param year_num 年份 * @param month_num 月份 * @param day_num 日期 * @returns */function validateDay(year_num,month_num,day_num){ if(day_num<1){ return dayLT1; //如果月份是1,3,5,7,8,10,12 }else if((month_num==1||month_num==3||month_num==5||month_num==7 ||month_num==8||month_num==10||month_num==12)&&day_num>31){ return dayGT31; //如果月份是4,6,9,11 }else if((month_num==4||month_num==6||month_num==9||month_num==11) &&day_num>30){ return dayGT30; //如果月份是2 }else if(month_num==2){ //如果为闰年 if(isLeapYear(year_num)&&day_num>29){ return dayGT29; }else if(day_num>28){ return dayGT28; } } return success;}/** * 校验是否为闰年 * @param year_num * @returns */function isLeapYear(year_num){ /*年份为4的倍数不一定是闰年 * (1)年份不是100的倍数但是4的倍数都是闰年 * (2)年份是400的倍数的年份是闰年 (如1900年不是闰年,而2000年是闰年) */ return year_num%4==0&&(year_num%100!=0||year_num%400==0);}/** * 校验小时 * @param hourSys 小时制 * @param hour_num * @returns */function validateHour(hour_num,hourSys){ //24小时制 if(hourSys == hour24System&&hour_num > 23){ return hourGT23; //12小时制 }else if(hourSys == hour12System&&hour_num > 11){ return hourGT11; } return success;}/** * 校验分钟 * @param minute_num * @returns */function validateMinute(minute_num){ //如果小时大于24 if(minute_num>59){ return minuteGT59; } return success;}/** * 校验秒钟 * @param second_num * @returns */function validateSecond(second_num){ //如果小时大于24 if(second_num>59){ return secondGT59; } return success;}/** * 根据字符串获取整数值 * @param str * @returns */function getIntValue(str){ if(strIsNull(str)){ return 0; } return str.replace(/^0+/g,'');}/** * 字符串是否为空 * @param dateStr */function strIsNull(str){ if(str!=null &&str.replace(/(^\s*)|(\s*$)/g,'').length>0){ return false; } return true;}/** * 得到错误的提示信息 * @param errCode 错误码 * @param controlName 控件名 * @param format 格式 */function getErrorMsg(errCode,controlName,format){ if(errCode == dateStrNull){ return controlName+'不能为空'; }else if(errCode == formatError){ return controlName+'请按日期格式\''+format+'\'输入'; }else if(errCode == lengthLt8){ return controlName+'请按日期格式\'YYYYMMDD\'输入'; }else if(errCode == monthLT1){ return controlName+'填写的月份有误,月份不能小于1'; }else if(errCode == monthGT12){ return controlName+'填写的月份有误,月份不能大于12'; }else if(errCode == dayLT1){ return controlName+'填写的日期有误,日期不能小于1'; }else if(errCode == dayGT28){ return controlName+'填写的日期有误,平年的2月份日期不能大于28'; }else if(errCode == dayGT29){ return controlName+'填写的日期有误,闰年的2月份日期不能大于29'; }else if(errCode == dayGT30){ return controlName+'填写的日期有误,月份为4,6,9,11时,日期不能大于30'; }else if(errCode == dayGT31){ return controlName+'填写的日期有误,月份为1,3,5,7,8,10,12时,日期不能大于31'; }else if(errCode == hourGT23){ return controlName+'填写的小时有误,24小时制的小时数不能超过23'; }else if(errCode == hourGT11){ return controlName+'填写的小时有误,12小时制的小时数不能超过11'; }else if(errCode == minuteGT59){ return controlName+'填写的分有误,分钟数不能超过59'; }else if(errCode == secondGT59){ return controlName+'填写的秒有误,秒钟数不能超过59'; }else if(errCode == dateGTNow){ return controlName+'填写日期有误,不能大于当前日期'; }else if(errCode == dateLTNow){ return controlName+'填写日期有误,不能小于当前日期'; }else if(errCode == timeGTNow){ return controlName+'填写时间有误,不能大于当前时间'; }else if(errCode == timeLTNow){ return controlName+'填写时间有误,不能小于当前时间'; }else if(errCode == failure ){ return controlName+'填写有误'; }}

你可能感兴趣的文章
Linux下的五种I/O模型
查看>>
【整理】I/O复用模型中的 select、poll、epoll
查看>>
阿里巴巴2018年校招研发C++笔试
查看>>
TX1上安装mavros时,出现UAS:GeographicLib exception: File not readable...错误
查看>>
2020软考系统架构设计师总结
查看>>
CRC冗余校验码简介
查看>>
Vue 自定义菜单条及下拉框
查看>>
Vue ElementUI el-dialog 可拖拽指令
查看>>
Vue ElementUI el-collapse 改造:手风琴
查看>>
1.项目初始化
查看>>
2.申请 Cesium Ion 密钥
查看>>
3.场景初始化
查看>>
4.获取鼠标移动位置
查看>>
0.各类资料
查看>>
5.WMTS 调用
查看>>
6.3dtiles 调用
查看>>
组件化:局部批量引入示例组件
查看>>
使用 Vuepress 创建自己的技术文档站
查看>>
工具:Nginx
查看>>
7.WMS 调用
查看>>