ranyut 发表于 2013-1-29 09:07:28

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

前几天写的用javascript将英文日期如(10MAR11)转成数字日期2011-03-10
网上找了好久没找到,自己写了个,勉强够用,但肯定不是最好的,如果有高人能给个更好的解决方案不胜感激。
本方法支持两种年的转换,两位年转成4位年。
如出生日期则取0到100岁之间,证件有效期则取2000年以后的年(使用forwardDate=true)。
 

      /*** 英文日期字符串转化为数字日期 * dateStr:原英文日期 05MAR86 * forwardDate:年是否只取当前年以后的数(true|false)* Ranyut2011-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:mm = 1;break;case em:mm = 2;break;case em:mm = 3;break;case em:mm = 4;break;case em:mm = 5;break;case em:mm = 6;break;case em:mm = 7;break;case em:mm = 8;break;case em:mm = 9;break;case em:mm = 10;break;case em:mm = 11;break;case em: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]
查看完整版本: Javascript英文日期转成数字日期解决方案