分享:javascript中实现字符串转日期(string.toDate("yyyyMMdd"))

javascript 的编码能力比较弱,但并不代码它不能做,只不过,需要你花一点功夫,前段时间在做日历的时候,需要从textbox读取日期,问题的关键是textbox 的日期可能是美国标准,可能是中国标准等等,没有办法将之转成日期格式,也就不能将日期在日历中定位到当天。在csdn上问了一个问题,结果没有人答得合适,我一怒之下,自儿写了一个,还行,能用。
说说需求吧,基本上很简单,就是能识别yyyymmdd及yymd这样的日期格式,或者yy、yyyy、M、MM、d、dd的任意组合。如yyyy年MM月dd日,匹配2009年06月10日。
先看代码吧:
js 代码
 

JScript code
    //将字符串转换为日期 
     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排序。

 

 

比较时间

function checkDate(c_time,e_time){
if($("#"+c_time).val().length==0||$("#"+e_time).val().length==0){return false;}
var c_date=$("#"+c_time).val().toDate("yyyy-MM-dd");
var e_date=$("#"+e_time).val().toDate("yyyy-MM-dd");
if(c_date.getTime()<e_date.getTime()){
$("#"+e_time).val("");
alert("提醒截止日期不能大于日程时间!");
return false;
}
return true;

 //alert(c_date.getTime()+" "+e_date.getTime());
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值