利用正则来格式化时间,利用replace方法

经常会遇到格式化时间的,今天就来整理一下

首先输入的格式大概有这些:

    1.2020-12-1 (年-月-日)
    2.2020/12/1 (年/月/日)
    3.2020-12-1 08:00
    4.2020/12/1 08:00:00(年-月-日 时:分:秒)
    5.2020-12-1 08:00:00(年/月/日 时:分:秒)
    6.2020/12/1 08:00:00(年/月/日 时:分:秒)
    7.2020-12-1 08:00:00.133(年-月-日 时:分:秒.毫秒)
    8.2020/12/1 08:00:00.121(年/月/日 时:分:秒.毫秒)

输出格式(大概就这些,如果有需要可以修改模板):

    1.2020年12月01日
    2.2020年12月01日 08时00分
    3.2020年12月01日 08时00分00秒

先来分析一下正则需求:

年4位数字组成:\d{4}

紧跟着 -或者/:[-/]

月份是由1-2位的数字组成:\d{1,2}

再紧跟着 -或者/:[-/]

日也是1-2位的数字组成:\d{1,2}

因为要把年月日都分别取出来,所以要用到分组,组合一下:

/(\d{4})[-/](\d{1,2})[-/](\d{1,2})/

再分析一下后面的时分秒,时分秒毫秒这些都有可能不出现的,所以要用到 ?

时:首先时与日之前要有空格1个以上,并且空格只匹配不捕获:  (?:\s+(\d{1,2}))?

分:与时之间有冒号、并且只匹配不捕获,且分不一定出现:(?:\:(\d{1,2}))?

秒跟分是一样的:(?:\:(\d{1,2}))?

毫秒是前面有个点跟几个数字:(?:\.(\d+))?

最终:全部组合起来

/(\d{4})[-/](\d{1,2})[-/](\d{1,2})(?:\s+(\d{1,2}))?(?:\:(\d{1,2}))?(?:\:(\d{1,2}))?(?:\.(\d+))?/

 

制定一个时间的模板 :  var dataF = "{1}年{2}月{3}日";

代码如下:  

	var str="2020-12-1 08:00:01"
	var reg=/(\d{4})[-/](\d{1,2})[-/](\d{1,2})(?:\s+(\d{1,2}))?(?:\:(\d{1,2}))?(?:\:(\d{1,2}))?(?:\.(\d+))?/;
	
	var dataF = "{1}年{2}月{3}日";
	str = str.replace(reg,function(){
		var args = arguments;
		return dataF.replace(/\{(\d)\}/g,function($0,$1){
			var ret = args[$1] ;
			if(!ret){
				ret = "00";
			}else {
				ret = ret.length<2?"0"+ret:ret;
			}
			return ret;
		})
		
	})
	console.log(str)

测试结果: 2020年12月01日

模板换一下再执行:var dataF = "{1}年{2}月{3}日 {4}时{5}分{6}秒";

结果:2020年12月01日 08时00分01秒

换成有毫秒的亦正常执行:var dataF = "{1}年{2}月{3}日 {4}时{5}分{6}秒{7}毫秒";    var str="2020-12-1 08:00:01.112";

2020年12月01日 08时00分01秒112毫秒

打完收工!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程界小明哥

请博主喝瓶水,博主持续输出!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值