// JavaScript Document
var success = 'success'; //校验成功
var failure = 'failure'; //校验失败
var dateStrNull = 'dateStrNull'; //日期字符串为空
var formatError = "formatError"; //不符合格式
var lengthLt8 = "lengthLt8"; //长度小于8
var monthLT1 = 'monthLT1'; //月份不能小于1
var monthGT12 = 'monthGT12'; //月份大于12
var dayGT28 = 'dayGT28'; //日期大于28
var dayGT29 = 'dayGT29'; //日期大于29
var dayGT30 = 'dayGT30'; //日期大于30
var dayGT31 = 'dayGT31'; //日期大于31
var dayLT1 = 'dayLT1'; //日期小于1
var hour24System = '24'; //采用24小时制
var hour12System = '12'; //采用12小时制
var hourGT23 = 'hourGT23'; //小时大于23
var hourGT11 = 'hourGT11'; //小时大于11
var minuteGT59 = 'minuteGT59'; //分钟大于59
var secondGT59 = 'secondGT59'; //秒钟大于59
var 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<nowDate){
return dateTimeLTNow;
}else{
return equality;
}
//比较年月日时分秒
}else if(compareType == dateTimeCompare){
var fd_date = new Date(dateStr.replace(/-/g,'/'));
if(fd_date>now){
return dateTimeGTNow;
}else if(fd_date<now){
return dateTimeLTNow;
}else{
return equality;
}
//比较时分秒
}else if(compareType == timeCompare){
var nowTimeStr = now.getHours()+''+ now.getMinutes()+''+ now.getSeconds();
var dateStrNoSpace = dateStr.replace(/:/g,'');
if(dateStrNoSpace>nowTimeStr){
return dateTimeGTNow;
}else if(dateStrNoSpace<nowTimeStr){
return dateTimeLTNow;
}else{
return equality;
}
}
}
/**
* 校验月份是否合法
* @param month_num 月份
* @returns
*/
function validateMonth(month_num){
//如果月份大于12或小于1
if(month_num>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+'填写有误';
}
}
|