日期:2014-05-16 浏览次数:20486 次
前几天写的用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);?
?