1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3   <head>
  4     <title> javascript string to date by pattern </title>
  5   </head>
  6   <body>
  7     <script language="javascript">
  8 
  9 /** year    : /yyyy/ */
 10 var y4 = "([0-9]{4})";
 11 /** year    : /yy/ */
 12 var y2 = "([0-9]{2})";
 13 /** index year */
 14 var yi = -1;
 15 
 16 /** month    : /MM/ */
 17 var M2 = "(0[1-9]|1[0-2])";
 18 /** month    : /M/ */
 19 var M1 = "([1-9]|1[0-2])";
 20 /** index month */
 21 var Mi = -1;
 22 
 23 /** day        : /dd/ */
 24 var d2 = "(0[1-9]|[1-2][0-9]|30|31)";
 25 /** day        : /d/ */
 26 var d1 = "([1-9]|[1-2][0-9]|30|31)";
 27 /** index day */
 28 var di = -1;
 29 
 30 /** hour    : /HH/ */
 31 var H2 = "([0-1][0-9]|20|21|22|23)";
 32 /** hour    : /H/ */
 33 var H1 = "([0-9]|1[0-9]|20|21|22|23)";
 34 /** index hour */
 35 var Hi = -1;
 36 
 37 /** minute    : /mm/ */
 38 var m2 = "([0-5][0-9])";
 39 /** minute    : /m/ */
 40 var m1 = "([0-9]|[1-5][0-9])";
 41 /** index minute */
 42 var mi = -1;
 43 
 44 /** second    : /ss/ */
 45 var s2 = "([0-5][0-9])";
 46 /** second    : /s/ */
 47 var s1 = "([0-9]|[1-5][0-9])";
 48 /** index month */
 49 var si = -1;
 50 
 51 var regexp;
 52 
 53 function getDate(dateString, formatString){
 54   if(validateDate(dateString, formatString)) {
 55     var now = new Date();
 56     var vals = regexp.exec(dateString);
 57     var index = validateIndex(formatString);
 58     var year = index[0]>=0?vals[index[0] + 1]:now.getFullYear();
 59     var month = index[1]>=0?(vals[index[1] + 1]-1):now.getMonth();
 60     var day = index[2]>=0?vals[index[2] + 1]:now.getDate();
 61     var hour = index[3]>=0?vals[index[3] + 1]:"";
 62     var minute = index[4]>=0?vals[index[4] + 1]:"";
 63     var second = index[5]>=0?vals[index[5] + 1]:"";
 64 
 65     var validate;
 66 
 67     if (hour == "")
 68       validate = new Date(year, month, day);
 69     else
 70       validate = new Date(year, month, day, hour, minute, second);
 71 
 72     if(validate.getDate()==day) return validate;
 73 
 74   }
 75   alert("wrong date");
 76 }
 77 
 78 
 79 function validateDate(dateString, formatString){
 80   var dateString = trim(dateString);
 81   if(dateString=="") return;
 82   var reg    =    formatString;
 83   reg    =    reg.replace(/yyyy/, y4);
 84   reg    =    reg.replace(/yy/, y2);
 85   reg    =    reg.replace(/MM/, M2);
 86   reg    =    reg.replace(/M/, M1);
 87   reg    =    reg.replace(/dd/, d2);
 88   reg    =    reg.replace(/d/, d1);
 89   reg    =    reg.replace(/HH/, H2);
 90   reg    =    reg.replace(/H/, H1);
 91   reg    =    reg.replace(/mm/, m2);
 92   reg    =    reg.replace(/m/, m1);
 93   reg    =    reg.replace(/ss/, s2);
 94   reg    =    reg.replace(/s/, s1);
 95   reg    =    new RegExp("^"+reg+"$");
 96   regexp = reg;
 97   return reg.test(dateString);
 98 }
 99 
100 function validateIndex(formatString){
101   
102   var ia = new Array();
103   var i = 0;
104   yi    =    formatString.search(/yyyy/);
105   if ( yi < 0 ) yi = formatString.search(/yy/);
106   if (yi >= 0) {
107     ia[i] = yi;
108     i++;
109   }
110 
111   Mi    =    formatString.search(/MM/);
112   if ( Mi < 0 ) Mi = formatString.search(/M/);
113   if (Mi >= 0) {
114     ia[i] = Mi;
115     i++;
116   }
117 
118   di    =    formatString.search(/dd/);
119   if ( di < 0 ) di = formatString.search(/d/);
120   if (di >= 0) {
121     ia[i] = di;
122     i++;
123   }
124 
125   Hi    =    formatString.search(/HH/);
126   if ( Hi < 0 ) Hi = formatString.search(/H/);
127   if (Hi >= 0) {
128     ia[i] = Hi;
129     i++;
130   }
131 
132   mi    =    formatString.search(/mm/);
133   if ( mi < 0 ) mi = formatString.search(/m/);
134   if (mi >= 0) {
135     ia[i] = mi;
136     i++;
137   }
138 
139   si    =    formatString.search(/ss/);
140   if ( si < 0 ) si = formatString.search(/s/);
141   if (si >= 0) {
142     ia[i] = si;
143     i++;
144   }
145 
146   var ia2 = new Array(yi, Mi, di, Hi, mi, si);
147 
148   for(i=0; i<ia.length-1; i++) 
149     for(j=0;j<ia.length-1-i;j++) 
150         if(ia[j]>ia[j+1]) {
151             temp=ia[j]; 
152             ia[j]=ia[j+1]; 
153             ia[j+1]=temp;
154         }
155 
156   for (i=0; i<ia.length ; i++)
157     for (j=0; j<ia2.length; j++)
158       if(ia[i]==ia2[j]) {
159         ia2[j] = i;
160       }
161   
162   return ia2;
163 }
164 
165 
166 function trim(str){
167     return str.replace(/(^\s*)|(\s*$)/g, "");
168 }
169 
170     //-->
171     </script>
172 
173     <FORM METHOD=POST ACTION="">
174         <INPUT TYPE="text" NAME="dater" value="02-29-2007">
175         <INPUT TYPE="text" NAME="formater" value="MM-dd-yyyy">
176         <INPUT TYPE="text" NAME="timer" value="" size="35">
177         <INPUT TYPE="submit" onclick="this.form.timer.value=getDate(this.form.dater.value, this.form.formater.value);return false;">
178     </FORM>
179 
180     <FORM METHOD=POST ACTION="">
181         <INPUT TYPE="text" NAME="dater" value="2004-2-29">
182         <INPUT TYPE="text" NAME="formater" value="yyyy-M-d">
183         <INPUT TYPE="text" NAME="timer" value="" size="35">
184         <INPUT TYPE="submit" onclick="this.form.timer.value=getDate(this.form.dater.value, this.form.formater.value);return false;">
185     </FORM>
186 
187     <FORM METHOD=POST ACTION="">
188         <INPUT TYPE="text" NAME="dater" value="12:56:34">
189         <INPUT TYPE="text" NAME="formater" value="HH:mm:ss">
190         <INPUT TYPE="text" NAME="timer" value="" size="35">
191         <INPUT TYPE="submit" onclick="this.form.timer.value=getDate(this.form.dater.value, this.form.formater.value);return false;">
192     </FORM>
193 
194     <FORM METHOD=POST ACTION="">
195         <INPUT TYPE="text" NAME="dater" value="2004-02-26 12:56:34">
196         <INPUT TYPE="text" NAME="formater" value="yyyy-MM-dd HH:mm:ss">
197         <INPUT TYPE="text" NAME="timer" value="" size="35">
198         <INPUT TYPE="submit" onclick="this.form.timer.value=getDate(this.form.dater.value, this.form.formater.value);return false;">
199     </FORM>
200 
201     <FORM METHOD=POST ACTION="">
202         <INPUT TYPE="text" NAME="dater" value="20040226125634">
203         <INPUT TYPE="text" NAME="formater" value="yyyyMMddHHmmss">
204         <INPUT TYPE="text" NAME="timer" value="" size="35">
205         <INPUT TYPE="submit" onclick="this.form.timer.value=getDate(this.form.dater.value, this.form.formater.value);return false;">
206     </FORM>
207 
208   </body>
209 </html>
 validateDateClean.html
 
	posted on 2008-12-30 00:08 
rox 阅读(20179) 
评论(2)  编辑  收藏