Date.format日期转换

RegExp中的$1...$9属性:

返回在模式匹配期间找到的,所存储的最近9个部分。

每当产生一个带括号的成功匹配时,$1...$9的属性值就会被修改,可以在一个正则表达式中指定任意多个带括号的子匹配,但是最多只能存储9个。

例:

<script type="text/javascript">
	var pattern = /(\w+)@(\w+)\.(\w+)/g,
		str = "Please send mail to george@contoso.com and someone@example.com. Thanks!",
		result = pattern.test(str);
	alert(RegExp.$1+"-"+RegExp.$2+"-"+RegExp.$3);
</script>
打印:george-contoso-com。

RegExp.$1匹配第一个带括号的子匹配,打印:george,依次类推,RegExp.$2匹配第二个带括号的子匹配,所以打印:contoso。
然后分析日期格式转换:

如给定要转换的日期格式为"yyy-MM-dd"。

如果我们要获取这个格式的年份,考虑到RegExp.$1的特性,我们可以通过/(y+)/的方式匹配该格式,获取年份的位数,然后截取当前日期的年份信息后替换即可。

如:

<script type="text/javascript">
	var pattern = "yyy年",
		result = /(y+)/.test(pattern),
		year = String(new Date().getFullYear());
	pattern = pattern.replace(RegExp.$1,year.substr(4-RegExp.$1.length));
	alert(pattern);
</script>
所以,我们可以根据这种方式写出日期转换的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
</body>
<script type="text/javascript">
	Date.prototype.format = function(pattern){
		if(typeof pattern === "undefined" || pattern === null) {
			pattern = "yyyy年MM月dd日 HH时mm分ss秒";
		}
		var val = {
			"M+":this.getMonth() + 1, //月份
			"d+":this.getDate(),  //日
			"H+":this.getHours(), //小时
			"m+":this.getMinutes(),   //分钟
			"s+":this.getSeconds()    //秒
		};
		if(/(y+)/.test(pattern)) {
			var year = String(this.getFullYear());
			pattern = pattern.replace(RegExp.$1,year.substr(4-RegExp.$1.length));
		}
		for(var i in val) {
			if(new RegExp("("+i+")").test(pattern)) {
				//如果只匹配一个值,如果该数<10,那么不加0,否则仍然为两位数,否则如果为2位数,<10则补0
				var temp = (RegExp.$1.length === 1)?val[i]:("00"+val[i]).substr(String(val[i]).length);
				pattern = pattern.replace(RegExp.$1,temp);
			}
		}
		return pattern;
	};
	alert(new Date().format("yyy年M月"));
</script>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值