JS直接转换含中文的乱序字符为日期
2009-10-14 15:37
204 查看
近段时间对javascript的日期处理非常不满意,以前使用.net习惯了,日期处理有很多很多的方法,但javascript对日期的处理就非常弱了,不过幸好,javascript的可扩展性非常强,我们可以写函数来扩展它,关于javascript日期的扩展,可以参考笔者写的相关文章:
Javascript日期处理中正则的应用
javascript中根据表达式实现字符串格式化为日期——升级版
javascript中实现读取指定格式的日期(format)
闲话少说,咱们来点实在的,先说需求:
将字符串转换为日期格式
不需要日期格式化的表达式
支持中文
不要求顺序,如可以将2009年10y8月转换为2009-10-8的日期格式,也可以将9时2009年10日5月转换为2009-5-10 9:00:00
直接从String扩展
好像有点难度哈,难度主在于中文单位和乱序及不要表达式,怎么办?还是采用正则表达式吧,这个东东是个好东东,强烈推荐。说过题外话,上次GF写毕业论文的时候,有一个调查需要替换,她的调查格式是这样的,A 你叫什么名字 B 你吃饭没有。需要在AB后面加上一点,变成A. 你叫什么名字 B. 你吃饭没有。正在GF咬牙狠狠地一个一个改的时候,某人(当然是我的)飞身而至,轻敲键盘,输入一个正则表达式,将([A-D])\s替换为\1 ,GF赏香吻一个,呵呵。
撇开题外话,正则还是很有用的,很多软件都正则有支持,不管你是不是编程,学会正则,会让你的工作效率有大大的提高。代码其实比较简单点,我就不解释了,代码中注释写得比较多,也没有解释的必要了,我说下思路吧。
合法的日期应该是一个数字带一个单位的,如在这个日期中,2008年10M8d,我们把这个字符分开,变成2008年,10M,8d。这时个我们就只需要取出数字与单位即可。
我们知道,在javascript中,我们访问一个对象的属性值可以使用object[prototype]或者object.prototype的方式来读取,当没有这个属性的时候,取出的值就是undefined。ok,我们可以利用这个特性来判断单位是否为英文。
我们使用正则表达式将数字后面带单位的字符取出来,然后循环将数字赋值给对应相应的属性,最后我们将对象组合为日期即可
有点晕乎吧,还是看代码来得实际滴,呵。
注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/
本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/
Javascript日期处理中正则的应用
javascript中根据表达式实现字符串格式化为日期——升级版
javascript中实现读取指定格式的日期(format)
闲话少说,咱们来点实在的,先说需求:
将字符串转换为日期格式
不需要日期格式化的表达式
支持中文
不要求顺序,如可以将2009年10y8月转换为2009-10-8的日期格式,也可以将9时2009年10日5月转换为2009-5-10 9:00:00
直接从String扩展
好像有点难度哈,难度主在于中文单位和乱序及不要表达式,怎么办?还是采用正则表达式吧,这个东东是个好东东,强烈推荐。说过题外话,上次GF写毕业论文的时候,有一个调查需要替换,她的调查格式是这样的,A 你叫什么名字 B 你吃饭没有。需要在AB后面加上一点,变成A. 你叫什么名字 B. 你吃饭没有。正在GF咬牙狠狠地一个一个改的时候,某人(当然是我的)飞身而至,轻敲键盘,输入一个正则表达式,将([A-D])\s替换为\1 ,GF赏香吻一个,呵呵。
撇开题外话,正则还是很有用的,很多软件都正则有支持,不管你是不是编程,学会正则,会让你的工作效率有大大的提高。代码其实比较简单点,我就不解释了,代码中注释写得比较多,也没有解释的必要了,我说下思路吧。
合法的日期应该是一个数字带一个单位的,如在这个日期中,2008年10M8d,我们把这个字符分开,变成2008年,10M,8d。这时个我们就只需要取出数字与单位即可。
我们知道,在javascript中,我们访问一个对象的属性值可以使用object[prototype]或者object.prototype的方式来读取,当没有这个属性的时候,取出的值就是undefined。ok,我们可以利用这个特性来判断单位是否为英文。
我们使用正则表达式将数字后面带单位的字符取出来,然后循环将数字赋值给对应相应的属性,最后我们将对象组合为日期即可
有点晕乎吧,还是看代码来得实际滴,呵。
//字符串转为日期,但不需要表达式 String.prototype.toDateEx = function() { var data = { y: 0, M: 0, d: 0, h: 0, m: 0, s: 0, ms: 0 }; //中文单位与英文单位对应 var cn = { "年": "y", "月": "M", "日": "d", "时": "h", "分": "m", "秒": "s", "毫秒": "ms" }; //第一步,取出数字与单位,如10月,2009年 var result = this.match(/\d+((ms)|[yMdhms年月日时分秒]|(毫秒))/ig); //第二步,循环取出数字,再根据单位把数据赋值到data中 for (var i = 0; i < result.length; i++) { RegExp(/(\d+)([yMdhms年月日时分秒]|(毫秒))/).test(result[i]); //例:2009年这个时间中,RegExp.$2应该是年,而data[年]是取不到合法的值的, //所以值为undefined,这样我们就可以判断是中文的值 if (data[RegExp.$2] == undefined) { data[cn[RegExp.$2]] = RegExp.$1; } else { data[RegExp.$2] = RegExp.$1; } } return new Date(data.y, data.M - 1, data.d, data.h, data.m, data.s, data.ms); } document.writeln("<pre>"); document.writeln("测试结果"); document.writeln("2009年10月15日".toDateEx()); document.writeln("2009y10M15d".toDateEx()); document.writeln("10秒5分4时2008年3d9M".toDateEx()); document.writeln("< /pre>");
注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/
本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/
相关文章推荐
- js中把中文字符转换成Utf8编码
- oracle不能直接用字符串匹配日期,字符串须转换为日期格式
- js 年月日中文格式日期转换成Date
- js 日期格式转换---将日期类型转换成字符串型格式
- js 日期转换成中文格式的函数
- 中文环境下安装odoo官方blog模块出现日期转换字符编码出错的解决
- js 日期转换成中文格式的函数
- js中将日期类型转换成字符串型格式
- js时间戳与时间日期间相互转换
- .Net与JS时间日期格式的转换问题对比分析
- Java转换Json日期/Date(1487053489965+0800)/格式以及js时间格式 Tue Feb 14 2017 14:06:32 GMT+0800
- js 将Date 日期对象与时间戳互相转换
- 在js中对中文和特殊字符转码
- js时间戳和日期字符串相互转换
- js时间戳与日期格式之间转换详解
- R 中的UNICODE字符转换为中文
- Hbase中文字符与byte[]的转换
- Java时间戳与日期格式直接的互相转换(1:将系统日期格式转为时间戳。2:将指定日期转为时间戳。3:将系统时间戳转为日期格式。4将指定的时间戳转为日期格式)
- js日期与字符串之间相互转换
- Html中载入含中文字符的js文件时出现中文乱码的解决办法