javascript的操作已知当前的字符串 ‘21/12/2009’
                             日  月  年如何把这个字符串转为date类型 , 
我用javascript的字符处理函数 分解这个string ,分别得到年2009  月12  日21
之后死活不能在javascript里转换为日期类型。  
我的方法是js里  new date(年,月 , 日 )
但是发现alert(thisdate)他的英文值是错误的

解决方案 »

  1.   

    var aDate=new Date()
    aDate.setFullYear(2009,11,21)//2009年12月21日 
    注意月要减1
    lz 再试试
      

  2.   

    thank u , It is the answer
     if(date_1!=null && date_1!="" )
       {
       alert("2");
       var date1_day=date_1.substring(0,2);
      var date1_mon=date_1.substring(3,5);
      var date1_year=date_1.substring(6,10);   var   date1=   new   Date(parseInt(date1_year,10),parseInt(date1_mon,10)-1,parseInt(date1_day,10));   
       alert("new");
    alert(date1);}
    else
        date1="";  
       
     if(date_2!=null && date_2!="" )
      {
      alert("3");
      var date2_day=date_2.substring(0,2);
      var date2_mon=date_2.substring(3,5);
      var date2_year=date_2.substring(6,10);   var   date2=   new   Date(parseInt(date2_year,10),parseInt(date2_mon,10)-1,parseInt(date2_day,10));   
       alert("new2");
    alert(date2);}
    else
        date2="";   if(date_1!=null && date_1!="" && date_2!=null && date_2!="" )
      {if(date1>date2)
      {
      alert("date error!   return false;   
      } 
        else     
      {
        
         return true;
            
      }
      }
      else
      return true;
      

  3.   

    现在有一个新问题 是否可以写一个js函数  
    传入字符串  得到日期
    functionn d(str)

    if(date_1!=null && date_1!="" )
      {
      alert("2");
      var date1_day=date_1.substring(0,2);
      var date1_mon=date_1.substring(3,5);
      var date1_year=date_1.substring(6,10);  var  date1=  new  Date(parseInt(date1_year,10),parseInt(date1_mon,10)-1,parseInt(date1_day,10)); 
      alert("new");
    alert(date1);}
    return date1;
    else
       // date1=""; 
    return null;
    }js是否支持 ??
      

  4.   

    avascript中根据表达式实现字符串格式化为日期——升级版 收藏  实际上我曾经在我的Blog中谈到过这个功能(查看原文 ),但当时并未做详细的解释,代码亦写得比较拙劣,这段时间又翻起了这段代码,觉得还是有很大改进的余地,于是觉得把代码再行精简一下。  这次改进的主要有几个地方:
    将日期表达式转换为取数字正则的代码,原来的代码写得非常之业余,我们可以对比一下两次代码:
    原来的代码
        1. pattern = format.replace( "yyyy" ,  "(\\~1{4})" ).replace( "yy" ,  "(\\~1{2})" )    
       2.    .replace("MM" ,  "(\\~1{2})" ).replace( "M" ,  "(\\~1{1,2})" )    
       3.     .replace("dd" ,  "(\\~1{2})" ).replace( "d" ,  "(\\~1{1,2})" ).replace(/~1/g,  "d" );   新的代码
        1. pattern = format.replace(/(yyyy)/g,  "([0-9]{4})" )  
       2. .replace(/(yy)|(MM)|(dd)|(hh)|(mm)|(ss)/g, "([0-9]{2})" )  
       3. .replace(/[Mdhms]/g, "([0-9]{1,2})" );  对比这两次代码,后面的代码可读性更强,漂亮了许多。把获取索引的代码进行了改进:
    原来的代码
        1. var  yPos = format.indexOf( "yyyy" );  
       2.         var  mPos = format.indexOf( "MM" );  
       3.         var  dPos = format.indexOf( "dd" );  
       4.         var  hPos = format.indexOf( "hh" );  
       5.         var  miPos = format.indexOf( "mm" );  
       6.         var  sPos = format.indexOf( "ss" );  
       7.         if  (mPos == -1) mPos = format.indexOf( "M" );  
       8.         if  (yPos == -1) yPos = format.indexOf( "yy" );  
       9.         if  (dPos == -1) dPos = format.indexOf( "d" );  
      10.         if  (hPos == -1) hPos = format.indexOf( "h" );  
      11.         if  (miPos == -1) miPos = format.indexOf( "m" );  
      12.         if  (sPos == -1) sPos = format.indexOf( "s" );  新的代码
        1. //获取子表达式的索引   
       2. getIndex = function (expr1, expr2) {  
       3.     var  index = format.indexOf(expr1);  
       4.     if  (index == -1) index = format.indexOf(expr2);  
       5.     return  index;  
       6. }  
       7.   
       8.     var  yPos = getIndex( "yyyy" ,  "yy" );  
       9.     var  mPos = getIndex( "MM" ,  "M" );  
      10.     var  dPos = getIndex( "dd" ,  "d" );  
      11.     var  hPos = getIndex( "hh" ,  "h" );  
      12.     var  miPos = getIndex( "mm" ,  "m" );  
      13.     var  sPos = getIndex( "ss" ,  "s" );  新的代码进行了提取封装,可维护性更强还有其它的改进就不说了,读者自己看,对比一下两者的差异。
    最终的新代码
        1. <script language= "javascript" >  
       2.     //将字符串转换为日期   
       3.     String.prototype.toDate = function (format) {  
       4.         pattern = format.replace(/(yyyy)/g, "([0-9]{4})" )  
       5.         .replace(/(yy)|(MM)|(dd)|(hh)|(mm)|(ss)/g, "([0-9]{2})" )  
       6.         .replace(/[Mdhms]/g, "([0-9]{1,2})" );  
       7.   
       8.         //获取子表达式的索引   
       9.         getIndex = function (expr1, expr2) {  
      10.             var  index = format.indexOf(expr1);  
      11.             if  (index == -1) index = format.indexOf(expr2);  
      12.             return  index;  
      13.         }  
      14.   
      15.         var  today =  new  Date();  
      16.         var  returnDate;  
      17.         if  ( new  RegExp(pattern).test( this )) {  
      18.             var  yPos = getIndex( "yyyy" ,  "yy" );  
      19.             var  mPos = getIndex( "MM" ,  "M" );  
      20.             var  dPos = getIndex( "dd" ,  "d" );  
      21.             var  hPos = getIndex( "hh" ,  "h" );  
      22.             var  miPos = getIndex( "mm" ,  "m" );  
      23.             var  sPos = getIndex( "ss" ,  "s" );  
      24.             var  data = { y: 0, m: 0, d: 0, h: 0, mi: 0, s: 0 };  
      25.             //对索引进行排序   
      26.             var  pos =  new  Array(yPos +  ",y" , mPos +  ",m" , dPos +  ",d" , hPos +  ",h" , miPos +  ",mi" , sPos +  ",s" ).sort(  
      27.                 function (a, b) {  
      28.                     a = parseInt(a.split("," )[0]);  
      29.                     b = parseInt(b.split("," )[0]);  
      30.                     return  a > b;  
      31.                 }  
      32.             );  
      33.   
      34.             //删除索引为-1的数组   
      35.             var  tmpIndex = 0;  
      36.             var  newPos =  new  Array();  
      37.             for  ( var  i = 0; i < pos.length; i++) {  
      38.                 if  (parseInt(pos[i].split( "," )[0]) != -1) {  
      39.                     newPos[tmpIndex] = pos[i];  
      40.                     tmpIndex++;  
      41.                 }  
      42.             }  
      43.   
      44.             //与当前文本进行匹配   
      45.             var  m =  this .match(pattern);  
      46.             for  ( var  i = 1; i < m.length; i++) {  
      47.   
      48.                 if  (i == 0)  return ;  
      49.                 var  flag = newPos[i - 1].split(',')[1];  
      50.                 data[flag] = m[i];  
      51.             };  
      52.   
      53.             data.y = data.y || today.getFullYear();             //年如果为空,则取当前年   
      54.             data.d = data.d || today.getDate();                 //天如果为空,则取今天   
      55.             //月不需要处理,因为月的0月是1月   
      56.   
      57.             //如果年是yy格式,则加上20   
      58.             if  (data.y.toString().length == 2) data.y = parseInt( "20"  + data.y);  
      59.             data.m -= 1;  
      60.             returnDate = new  Date(data.y, data.m, data.d, data.h, data.mi, data.s);  
      61.         }  
      62.         returnDate = returnDate || today;  
      63.         return  returnDate;  
      64.     }  
      65.   
      66.     document.writeln("<pre>测试结果" );  
      67.     document.writeln("10月18日2008年 10点11分12秒" .toDate( "MM月dd日yyyy年 hh点mm分ss秒" ));        
      68.     document.writeln("2008-10-8" .toDate( "yyyy-M-d" ));            //2008年10月8号   
      69.     document.writeln("12-18 2008" .toDate( "MM-dd yyyy" ));         //2008年12月18号   
      70.     document.writeln("12-16" .toDate( "MM-dd" ));                   //2009年12月16号   
      71.     document.writeln("</pre>" );  
      72. </script>  原来的旧代码
        1. //将字符串转换为日期   
       2. String.prototype.toDate = function (format) {  
       3.     pattern = format.replace("yyyy" ,  "(\\~1{4})" ).replace( "yy" ,  "(\\~1{2})" )         //年   
       4.     .replace("MM" ,  "(\\~1{2})" ).replace( "M" ,  "(\\~1{1,2})" )                          //月   
       5.     .replace("dd" ,  "(\\~1{2})" ).replace( "d" ,  "(\\~1{1,2})" )                          //日   
       6.     .replace("hh" ,  "(\\~1{2})" ).replace( "h" ,  "(\\~1{1,2})" )                          //时   
       7.     .replace("mm" ,  "(\\~1{2})" ).replace( "m" ,  "(\\~1{1,2})" )                          //分   
       8.     .replace("ss" ,  "(\\~1{2})" ).replace( "s" ,  "(\\~1{1,2})" )                          //称   
       9.     .replace(/~1/g, "d" ).replace( " " ,  "[\\s]" );  
      10.   
      11.     sortDate = function (a, b) {  
      12.         a = parseInt(a.split("," )[0]);  
      13.         b = parseInt(b.split("," )[0]);  
      14.         return  a > b;  
      15.     }  
      16.     var  returnDate;  
      17.     if  ( new  RegExp(pattern).test( this )) {  
      18.         var  yPos = format.indexOf( "yyyy" );  
      19.         var  mPos = format.indexOf( "MM" );  
      20.         var  dPos = format.indexOf( "dd" );  
      21.         var  hPos = format.indexOf( "hh" );  
      22.         var  miPos = format.indexOf( "mm" );  
      23.         var  sPos = format.indexOf( "ss" );  
      24.         if  (mPos == -1) mPos = format.indexOf( "M" );  
      25.         if  (yPos == -1) yPos = format.indexOf( "yy" );  
      26.         if  (dPos == -1) dPos = format.indexOf( "d" );  
      27.         if  (hPos == -1) hPos = format.indexOf( "h" );  
      28.         if  (miPos == -1) miPos = format.indexOf( "m" );  
      29.         if  (sPos == -1) sPos = format.indexOf( "s" );  
      30.   
      31.         var  pos =  new  Array(yPos +  ",y" , mPos +  ",m" , dPos +  ",d" , hPos +  ",h" , miPos +  ",mi" , sPos +  ",s" ).sort(sortDate);  
      32.         var  tmpIndex = 0;  
      33.         for  ( var  i = 0; i < pos.length; i++) {  
      34.             if  (pos[i].indexOf( "-1" ) < 0)  break ;  
      35.             tmpIndex++;  
      36.         }  
      37.         pos = pos.splice(tmpIndex, pos.length - tmpIndex);  
      38.         var  data = { y: 0, m: 0, d: 0, h: 0, mi: 0, s: 0 };  
      39.         var  m =  this .match(pattern);  
      40.         for  ( var  i = 1; i < m.length; i++) {  
      41.   
      42.             if  (i == 0)  return ;  
      43.             var  flag = pos[i - 1].split(',')[1];  
      44.             data[flag] = m[i];  
      45.         };  
      46.   
      47.         if  (data.y.toString().length == 2) {  
      48.             data.y = parseInt("20"  + data.y);  
      49.         }  
      50.         data.m = data.m - 1;  
      51.         returnDate = new  Date(data.y, data.m, data.d, data.h, data.mi, data.s);  
      52.     }  
      53.     if  (returnDate ==  null  || isNaN(returnDate)) returnDate =  new  Date();  
      54.     return  returnDate;  
      55. }    版权所有©Conis,复制或者转载请保留此信息,任何人未经许可,不得擅自将本文发布作为商业用途。  更多内容更多精彩请您访问http://www.conis.cn
      本人才疏学浅,难免有不到之处,如果您对本文有任何意见,请您与发表留言或者与我联系。联系方式如下:    QQ:47015280    MSN:Conis#Conis.cn(请将#替换为@)    E-Mail:[email protected]
    http://blog.csdn.net/conis/archive/2009/07/10/4337634.aspx