javascript的操作已知当前的字符串 ‘21/12/2009’
日 月 年如何把这个字符串转为date类型 ,
我用javascript的字符处理函数 分解这个string ,分别得到年2009 月12 日21
之后死活不能在javascript里转换为日期类型。
我的方法是js里 new date(年,月 , 日 )
但是发现alert(thisdate)他的英文值是错误的
日 月 年如何把这个字符串转为date类型 ,
我用javascript的字符处理函数 分解这个string ,分别得到年2009 月12 日21
之后死活不能在javascript里转换为日期类型。
我的方法是js里 new date(年,月 , 日 )
但是发现alert(thisdate)他的英文值是错误的
aDate.setFullYear(2009,11,21)//2009年12月21日
注意月要减1
lz 再试试
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;
传入字符串 得到日期
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是否支持 ??
将日期表达式转换为取数字正则的代码,原来的代码写得非常之业余,我们可以对比一下两次代码:
原来的代码
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