论坛首页 Web前端技术论坛

正则表达式实现JavaScript日期格式化的想法。

浏览 16642 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-07  
今天和网友聊起在javascript里面实现DateFormat 的话题。

把想法发布一下,当是笔记。

格式化:
  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 的处理对象可以根据首字母确定,长度可以作为处理函数的参数,这样,减少对象数目。维护起来方便一点。

想法而已,实际实现时可能还有很多现在无法意料的事情:)
   发表时间: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;
}
0 请登录后投票
   发表时间:2007-06-07  
("00"+ o[k]).substr((""+ o[k]).length);

这句比较经典
0 请登录后投票
   发表时间:2007-06-07  
理想上最好是实现java的DateFormat。
不过要求不是很高的话,Meizz的用用就可以了。
0 请登录后投票
   发表时间:2007-06-08  
ext的也很不错 不过好像这些都不支持 分隔符 自定义 比如可以用“-” 也可以用“/”
0 请登录后投票
   发表时间:2007-06-08  
如果按照上面的想法,实现出来,分隔符时不需要定义的,只要不是yMdhms都将当作分隔符处理,基本喝java 的 DateFormat行为一样了:)
0 请登录后投票
   发表时间:2007-06-08  
请问if(/(y+)/.test(fmt)) 这句是什么意思
0 请登录后投票
   发表时间:2007-06-08  
campaign 写道
请问if(/(y+)/.test(fmt)) 这句是什么意思


正则。

如果fmt里有一个“y”
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics