日期:2014-05-16  浏览次数:20486 次

Javascript英文日期转成数字日期解决方案

前几天写的用javascript将英文日期如(10MAR11)转成数字日期2011-03-10

网上找了好久没找到,自己写了个,勉强够用,但肯定不是最好的,如果有高人能给个更好的解决方案不胜感激。

本方法支持两种年的转换,两位年转成4位年。

如出生日期则取0到100岁之间,证件有效期则取2000年以后的年(使用forwardDate=true)。

?

      /**
	* 英文日期字符串转化为数字日期 
	* dateStr:原英文日期 05MAR86 
	* forwardDate:年是否只取当前年以后的数(true|false)
	* Ranyut  2011-5-30
	**/
function pasreEnDate(dateStr, forwardDate) {
	try {
		if (dateStr && dateStr.trim().length != 7) {
			return;
		}
		var dd = dateStr.substring(0, 2);
		var mm = dateStr.substring(2, 5);
		var yy = dateStr.substring(5, 7);
		mm = mm.toUpperCase();
		var em = new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
		switch (mm) {
		  case em[0]:
			mm = 1;
			break;
		  case em[1]:
			mm = 2;
			break;
		  case em[2]:
			mm = 3;
			break;
		  case em[3]:
			mm = 4;
			break;
		  case em[4]:
			mm = 5;
			break;
		  case em[5]:
			mm = 6;
			break;
		  case em[6]:
			mm = 7;
			break;
		  case em[7]:
			mm = 8;
			break;
		  case em[8]:
			mm = 9;
			break;
		  case em[9]:
			mm = 10;
			break;
		  case em[10]:
			mm = 11;
			break;
		  case em[11]:
			mm = 12;
			break;
		}
		var now = new Date();
		var year = now.getFullYear();
		if (yy.length == 2) {
			//指定为10进制否则出问题
			yy = parseInt(yy,10); 
			if (forwardDate) { 
			    //只是当前日期以后的日期
				yy = 2000 + yy;
			} else {
				//如出生日期
				var miny = year - (2000 + yy);
				var maxy = year - (1900 + yy);
				if (miny > 0 || maxy < 100) {
					yy = 1900 + yy;
				} else {
					yy = 2000 + yy;
				}
			}
		}
		var nd = mm + "/" + dd + "/" + yy;
		var date2 = new Date(nd);
		return myGetDateText(date2);
	}
	catch (e) {
		return "";
	}
}

//将日期转化为2010-04-09格式的字符串
function myGetDateText(date1) {
	var dateStr = "";
	if (date1) {
		dateStr = date1.getFullYear();
		var month = date1.getMonth() + 1;
		var day = date1.getDate();
		if (month < 10) {
			dateStr += "-0" + month;
		} else {
			dateStr += "-" + month;
		}
		if (day < 10) {
			dateStr += "-0" + day;
		} else {
			dateStr += "-" + day;
		}
	}
	return dateStr;
}
/*******转化日期结束 ************/

?

注意parseInt()方法,parseInt("08"),parseInt("09")为转成0而不是8,9。

故用parseInt(string, radix);?

------------------------------------

对于 parseInt("07");之前 /parseInt("10") 到以后?? 都能得到正确的结果,但如果是parseInt("08") 或parseInt("09")则返回0;?

首先看parseInt语法:parseInt(string, radix);?

如果后面参数没写就以第一个的开头判断?

其中string为要转换的字符串,radix为二进制,八进制,十六进制或十进制。?

在默认不指定radix时,当以0x开关时,为十六进制;?

如果以0开头且第二个字符不为 "x",则认为是八进制,(因为八进制不能有8,9所以报错返回0)。?

如果以1开头就以十进制,所以10以后就又是对的了?

所以,在我们用时还是明确指定进位制,以防出错。?

如我们平时都用十进制位,我们就用?parseInt("08", 10);?

?

1 楼 waitdream 2011-06-17  
用什么switch?数组不是直接可以用下标么?