转换下面的代码以欧洲格式显示日期

时间:2015-07-24 17:06:33

标签: javascript

下面的IsDateValid函数以美国格式验证日期。我将更改为将其转换为以欧洲格式验证日期。当验证工作时,用户可以通过简单地输入+或 - 符号来输入日期,具体取决于他们想要的内容,即过去的日期或未来的日期。

function IsLeapYear(year) {
		//Convert from string to number
		year = year - 0;
		if ((year/4)   != Math.floor(year/4)) return false;
		if ((year/100) != Math.floor(year/100)) return true;
		if ((year/400) != Math.floor(year/400)) return false;
		return true;
	} //function IsLeapYear...
	function countChar(str, daChar) {
		//See how many of 'dachar' are in 'str' and return as daCount
		var daCount=0;
		for (i = 0; i < str.length; i++) {
			if (str.charAt(i) == daChar)
				//increment count each time we find daChar in str
				daCount++; 
		}
		return daCount;
	} //function countChar...
	function IsDateValid(dateField, noDateRqrd) {
	    //If no date is required and they didn't enter one, then go back
		if (((typeof noDateRqrd != "undefined") && (dateField.value.length == 0))||dateField.value.length == 0)
			return null;
		//We're going to check this date so go on
		var GoodLength = false;
		var msg='';
		var daysOfMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		var daysOfMonthLY = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		//Make sure they have the right number of '/'
		var cCount=countChar(dateField.value,'/');
		//force a date value
		if (dateField.value.length >= 3) {
			//alert('cc: ' + cCount + 'fl: ' + dateField.value.length);
			if ((cCount == 1) && (dateField.value.length >= 3) && (dateField.value.length <= 5)) 
		  		GoodLength=true;
			else if ((cCount == 2) && (dateField.value.length >= 4) && (dateField.value.length <= 10))
		  		GoodLength=true;
		}
		//If the length is good, then let's check the contents of the dateField
		if (GoodLength == true) {
			var firstslash=dateField.value.indexOf('/')+1; //must add 1 to get real position
			var lastslash=dateField.value.lastIndexOf('/')+1;
			/****************************
			Note: substr is not included in CFStudio so 'substr' will not be bolded & blue
			*****************************/
			var month=dateField.value.substr(0,firstslash-1);
			if ((!isNaN(month)) && (month < 13)){
				if (firstslash != lastslash) {
					//alert(dateField.value);
					var day=dateField.value.substr(firstslash,lastslash-firstslash-1); //lastslash-firstslash+1
					//We only need to tell it where to cut off the first char 
					var year=dateField.value.substr(lastslash);
					//Access dates can range from 100 to 9999.
					//SQL Server dates can range from 1753 to 9999. 
					//Since this code can run for either db, we'll use the more restrivtive date of 1753. 
					//The length test will catch any date > 9999.
					if (!isNaN(day)&&!isNaN(year)&&(year.length < 5)){
						//If there isn't a year value, then put in the current year
						if (year.length == 0) {
							//There is no year so we only need to get day
							var day=dateField.value.substr(firstslash,lastslash-firstslash-1);
							//Since they didn't enter a year, we'll use the current year 
							var now = new Date();
							year=now.getFullYear();
							dateField.value = month + "/" + day + "/" + year;
						} else if ((year.length == 1) || (year.length == 2)) {
							var tmpDate = new Date(dateField.value);
							//Programmer's Note: entered value of "00" would be return as "1900" by getFullYear
							tmpDate_yyyy = tmpDate.getFullYear()-1900; //Get 4 dig date and reindex without centuary								   
							//alert('tmpDate_yyyy: ' + tmpDate_yyyy);
							if (tmpDate_yyyy < 100) { //If less than 100, then we're in 20th centuary
								if (tmpDate_yyyy < 60)  //do 00 to 59 as 20xx
									tmpDate.setFullYear(2000 + tmpDate_yyyy); //reset year to 21st centuary		
								else //do 60 to 99 as 19xx
									tmpDate.setFullYear(1900 + tmpDate_yyyy); //reset year to 20th centuary	
								//Have to do it the hard way or we'll also get day, time, etc. which we don't want here
								//getMonth is zero based so it returns a number one less that we want
							}
							dateField.value = tmpDate.getMonth()+1 + "/" + tmpDate.getDate() + "/" + tmpDate.getFullYear();
						} else if ((year.length == 4)&&(year > 1752)) {
							dateField.value = day + "/" + Month + "/" + year;
						} else {
							msg= 'The date you entered is not valid: ' + dateField.value + '.';
						}//if
					} else {
						msg= 'The date you entered is not valid: ' + dateField.value + '.';
					} //if
				} else {
					//There is no year so we only need to get day
					var day=dateField.value.substr(firstslash);
					if (!isNaN(day)) {
						//Since they didn't enter a year, we'll use the current year 
						var now = new Date();
						var year=now.getFullYear();
						dateField.value = month + "/" + day + "/" + year;
					} else {
						msg= 'The day you entered is not valid: ' + dateField.value + '.';
					} //if
				}
				//alert('m: ' + month + ' d: ' + day + ' y:' + year);
				if ((day==0)||(IsLeapYear(year) && day > daysOfMonthLY[month-1])||(!IsLeapYear(year) && day > daysOfMonth[month-1]))
					msg= 'The date you entered is not valid: ' + dateField.value + '.';
			} else {
				msg='The month you entered is not valid: ' + month + '.';
			}
	  	} else {
			if (dateField.value.length == 0) {
				msg= 'You must enter enter a valid Date.';			
			} else if ((dateField.value.toLowerCase() == 'today')||(dateField.value.toLowerCase() == 'now')) {
				var now = new Date();
				var day=now.getDate();
				var month=now.getMonth()+1; //Have to add 1 to get correct month
				var year=now.getFullYear();
				dateField.value = month + "/" + day + "/" + year;
			} else if ((dateField.value.indexOf('+') == 0)||(dateField.value.indexOf('-') == 0)) {
				//alert('in: ' + dateField.value + ', NaN: ' + isNaN(dateField.value));
				if (!isNaN(dateField.value)) {
					var now = new Date();
					var nowMS = now.getTime(); //Get the current time in milliseconds
					//Add the number of milliseconds in a day times the number of days requested
					//Use the Math.floor to make sure we only get whole days in case they add a decimal value
					now.setTime(nowMS + Math.floor((dateField.value * 1000*60*60*24))); 
					var day=now.getDate();
					var month=now.getMonth()+1; //Have to add 1 to get correct month
					var year=now.getFullYear();
					dateField.value = month + "/" + day + "/" + year;				
				} else 
					msg= 'The proper format, +#, or -#, with no spaces in between: e.g., "+6", or "-2". You entered: "' + dateField.value + '".';
			} else
	  		msg= '146: The date you entered is not valid: "' + dateField.value + '".';
		}
	  	if(msg.length > 0) {
			if (typeof noDateRqrd == 'undefined') {
		  		var lastLine="Select 'OK' to re-enter value, or 'Cancel' to enter the current date.\n\n"
			} else {
				var lastLine="Select 'OK' to re-enter value, or 'Cancel' to clear the date.\n\n"
			}
			var conmsg ="\n\n____________________________________________________\n\n" + 
					  msg +
				      "\n\n____________________________________________________\n\n" +
					  "A valid date must contain at least one forward slash '/' as well as a day and a month.\n" +
					  "If you leave the year blank, then the current year will be inserted.\n\n" +
					  "The allowable date range is from 1/1/1753 to 12/31/9999.\n\n" + 
					  lastLine
			if (confirm(conmsg))
				dateField.focus();
			else {
				if (typeof noDateRqrd == 'undefined') {
					//get the current time 
					var Now=new Date();
					dateField.value=Now.getMonth()+1 + "/" + Now.getDate() + "/" + Now.getFullYear();
				} else {
					dateField.value="";
				}
			}
			return false;
		} else
			return true;
	} //function IsDateValid

0 个答案:

没有答案