通用时间转换方法

Javascript中使用正则表达式转换时间为指定格式的字符串,详细注释。


知识点

目录

知识点

RegExp.$1~$99

substr() 方法

语法

返回值

提示和注释

源码


RegExp.$1~$99

  • $1, $2, $3, $4, $5, $6, $7, $8, ……属性是包含括号子串匹配的正则表达式的静态和只读属性。
  • $99,最多可以有99个匹配
  • 这些属性可以在String.replace 方法中替换字符串. 在这种情况下, 不用在前面加上RegExp。

substr() 方法

substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。

语法

stringObject.substr(start,length)
参数描述
start必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
length可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

返回值

一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

提示和注释

注释:substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。

重要事项:ECMAscript 没有对该方法进行标准化,因此反对使用它。

源码

Date.prototype.Format = function (fmt) { 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
    };
	/*此时
	o={	
		"M+":1, 
		"d+":22, 
		"h+":15,
		"m+":4,
		"s+":22
		}
	fmt="yyyyMMddhhmmss"
	*/
	// 匹配格式化的时间是否有年份,并将其转换
    if (/(y+)/.test(fmt)) 
	{
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 
		//RegExp.$1 : yyyy,换成对应的年份,最多4位。
		///substr是取从参数1位置到结尾的子字符串
	}
	//此时fmt="2019MMddhhmmss"
	//月、日、时、分、秒,替换并补0
	 for (var k in o)   //第一个k="M+",o[k]=11
	 {
		if (new RegExp("(" + k + ")").test(fmt))    
        //RegExp="(M+)",  RegExp.$1="MM"
		{
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            //RegExp.$1.length == 1:如果"M"只有1个,就不用补0
		}
	}
	//此时fmt="20190122150422"
    return fmt;
}
//加一些随机盐值
var requestId = new Date().Format('yyyyMMddhhmmss')+''+Math.random().toString().slice(-5)  
console.log('requestId is '+requestId)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值