职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 520|回复: 2

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

[复制链接]
fossil 发表于 2011-8-18 10:28 | 显示全部楼层 |阅读模式
前几天写的用javascript将英文日期如(10MAR11)转成数字日期2011-03-10
网上找了好久没找到,自己写了个,勉强够用,但肯定不是最好的,如果有高人能给个更好的解决方案不胜感激。
本方法支持两种年的转换,两位年转成4位年。
如出生日期则取0到100岁之间,证件有效期则取2000年以后的年(使用forwardDate=true)。

Java代码  
      /**  
    * 英文日期字符串转化为数字日期   
    * 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;   
}   
/*******转化日期结束 ************/  

      /**
        * 英文日期字符串转化为数字日期
        * 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);


jinchang 发表于 2011-8-18 10:28 | 显示全部楼层
用什么switch?数组不是直接可以用下标么?

shmilyyu 发表于 2011-8-18 10:28 | 显示全部楼层
waitdream 写道
用什么switch?数组不是直接可以用下标么?

我也刚好正想说这个~
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-20 05:04 , Processed in 0.157654 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表