日期格式化详解

// 对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;
}

调用: 

var time1 = new Date().Format("yyyy-MM-dd");

var time2 = new Date().Format("yyyy-MM-dd HH:mm:ss");  
针对自己在日期格式化过程中遇到的一些问题,提出一些自己的理解,希望帮助更多初学者。
<script type="text/javascript">
//定义一个方法Format,参数为fmt=yyyy-MM-dd hh:mm:ss或者yyyy-MM-dd--是调用函数所传参数格式决定的
Date.prototype.Format = function(fmt){
//在方法里面首先定义了一个对象,有7对键值对即属性。,它的作用便于遍历取值
  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))///(y+)/作用匹配参数里面的yyyy,匹配成功,则执行下一步
  {//replace查找并替换,RegExp.$1用于匹配捕获组即yyyy,this.getFullYear()获取年份,至于+"",可以这样理解如年份为2017,它是一个数字,如果变成字符串则可以使用+"",
   //更具体一点,5+5=10,但是5+"5"=55,=》5+""="5".
   //substr()截取字符串。substr(4 - RegExp.$1.length)可以理解为对年份截取的长度,如:2017,则fmt=2017-MM-dd hh:mm:ss,但如果输入的为:17
  	fmt= fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  }
  //最后,遍历属性,取值
  for(var k in o)
  {//RegExp("(" + k + ")")意思:外层("")是RegExp构造函数的语法,模式必须是字符串。里层()是分组,以便单独处理,"(" + k + ")"可以看做字符串+变量+字符串,
  	if(new RegExp("(" + k + ")").test(fmt))
  {		//replace查找并替换,此时这里的RegExp.$1=MM,dd,hh,mm,ss;接下来3元运算符判断键长度,如MM==8,长度为2!=1,所以执行("00"+ o[k]).substr((""+ o[k]).length))
  		//结果为:("00"+ 8).substr((""+ 8).length))=》("008").substr("8").length)=08,这里的""+o[k]的双引号用法同上面一样,substr("8").length=1,所以结果为08,如果要是MM==10,"0010",从第2为截取则为10.
  		fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
  	}
  }
  //返回值
  return fmt;   
};
//调用方法
var time1 = new Date().Format("yyyy-MM-dd hh:mm:ss"); 
var time2 = new Date().Format("yyyy-MM-dd"); 
document.write(time1);

</script>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值