javascript中实现读取指定格式的日期(format)


2009-6-9 09:11 Javascript&jQuery 没有评论768
javascript 的编码能力比较弱,但并不代码它不能做,只不过,需要你花一点功夫,前段时间在做日历的时候,需要从textbox读取日期,问题的关键是textbox的日期可能是美国标准,可能是中国标准等等,没有办法将之转成日期格式,也就不能将日期在日历中定位到当天。在csdn上问了一个问题,结果没有人答得合适,我一怒之下,自儿写了一个,还行,能用。
说说需求吧,基本上很简单,就是能识别yyyymmdd及yymd这样的日期格式,或者yy、yyyy、M、MM、d、dd的任意组合。如yyyy年MM月dd日,匹配2009年06月10日。
先看代码吧:
 //将字符串转换为日期
     String.prototype.toDate = function(format) {
         pattern = format.replace("yyyy", "(\~1{4})").replace("yy", "(\~1{2})")
             .replace("MM", "(\~1{2})").replace("M", "(\~1{1,2})")
             .replace("dd", "(\~1{2})").replace("d", "(\~1{1,2})").replace(/~1/g, "d");  
 
         var returnDate;
         if (new RegExp(pattern).test(this)) {
             var yPos = format.indexOf("yyyy");
             var mPos = format.indexOf("MM");
             var dPos = format.indexOf("dd");
             if (mPos == -1) mPos = format.indexOf("M");
             if (yPos == -1) yPos = format.indexOf("yy");
             if (dPos == -1) dPos = format.indexOf("d");
             var pos = new Array(yPos + "y", mPos + "m", dPos + "d").sort();
             var data = { y: 0, m: 0, d: 0 };
             var m = this.match(pattern);
             for (var i = 1; i < m.length; i++) {  
 
                 if (i == 0) return;
                 var flag = pos[i - 1].split('')[1];
                 data[flag] = m[i];
             };  
 
             if (data.y.toString().length == 2) {
                 data.y = parseInt("20" + data.y);
             }
             data.m = data.m - 1;
             returnDate = new Date(data.y, data.m, data.d);
         }
         if (returnDate == null || isNaN(returnDate)) returnDate = new Date();
         return returnDate;
     }

代码很有意思,有两个地方解释一下,一个是前面的正则,之所以用~1,是因为d是日期格式的天,会被替换掉,所以用用~1,再替换回来。第二个地方是ymd的顺序,这个地方很重要,因为日期可能是MM/dd/yyyy,也可以是yyyy-mm-dd,所以先放到一个数组中,根据indexof排序。

嗯,或者你也可以收听我的微博,腾讯微博(主要用这个,其他的看我的个人介绍)

我写博客常常出现错别字,常常错得还很离谱,有时候我自己看了第二遍都骂我自个儿,但我又不习惯重复审查,纠结啊...各位看到啥错别字或者不明白的地方,请给我留言指出来,感谢感谢。

  

  • 评论敬告那些为做SEO而评论的朋友,本博不欢迎此类评论,请不要利用本博做关键字,一律封杀。

    绝不跨省追捕
    不会发垃圾邮件
    增加你的流量