浏览 16656 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-07
把想法发布一下,当是笔记。 格式化: 1、先用正则把日期表达式分段: var tokens = "yyyy-MM-dd(没有时间)".match(/y+|M+|d+|m+|[^yMdm]+/g) //结果数组为:yyyy,-,MM,-,dd,(没有时间) 2、将其中的yyyy MM dd 替换成相映的处理对象 3、格式化时,先复制数组,依次遍历,如果元素是处理对象,那么元素值替换成处理结果。 4、将新数组join。即为需要结果。 5、parse时。先复制数组,若元素为字符串,精确匹配。若未处理对象,读取需要的值,匹配失败,则终止操作,返回结果。 yyyy MM dd 的处理对象可以根据首字母确定,长度可以作为处理函数的参数,这样,减少对象数目。维护起来方便一点。 想法而已,实际实现时可能还有很多现在无法意料的事情:) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-07
这个很不错,好像是 csdn 的 Meizz 写的:
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 Date.prototype.Format = function(fmt) { //author: meizz var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("("+ k +")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); return fmt; } |
|
返回顶楼 | |
发表时间:2007-06-07
("00"+ o[k]).substr((""+ o[k]).length);
这句比较经典 |
|
返回顶楼 | |
发表时间:2007-06-07
理想上最好是实现java的DateFormat。
不过要求不是很高的话,Meizz的用用就可以了。 |
|
返回顶楼 | |
发表时间:2007-06-08
ext的也很不错 不过好像这些都不支持 分隔符 自定义 比如可以用“-” 也可以用“/”
|
|
返回顶楼 | |
发表时间:2007-06-08
如果按照上面的想法,实现出来,分隔符时不需要定义的,只要不是yMdhms都将当作分隔符处理,基本喝java 的 DateFormat行为一样了:)
|
|
返回顶楼 | |
发表时间:2007-06-08
请问if(/(y+)/.test(fmt)) 这句是什么意思
|
|
返回顶楼 | |
发表时间:2007-06-08
campaign 写道 请问if(/(y+)/.test(fmt)) 这句是什么意思
正则。 如果fmt里有一个“y” |
|
返回顶楼 | |