时间戳转化为常用日期格式—问题分析

封装一个转换函数

function formatDate(date, fmt) {
//1.获取年份
//y+   表示一个或者多个y
//y*       0个或者多个y
//y?       0个或者1个y
//2019
//yy -19
//yyyy -2019
//y -9
//yyy -019
  if (/(y+)/.test(fmt)) {
//4位的年份不同于其他
//正则表达式+替换函数+隐式转换+截取
//RegExp.$1:匹配组 ,如‘yyyy’(RegExp是js中的一个内置对象,为正则表达式;RegExp.$1是RegExp的一个属性)
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));

  }

  let o = {

    'M+': date.getMonth() + 1,

    'd+': date.getDate(),

    'h+': date.getHours(),

    'm+': date.getMinutes(),

    's+': date.getSeconds()

  };

  for (let k in o) {

    if (new RegExp(`(${k})`).test(fmt)) {

      let str = o[k] + '';

      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));

    }

  }

  return fmt;

};



function padLeftZero (str) {

  return ('00' + str).substr(str.length);

};

注意:fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
这句代码让我捉摸了好几个小时,总觉得这个三元表达式的length===1时该执行补零操作;事实上,RegExp.$1.length代表的是我们设定传入的格式化日期的位数,如果是长度为1直接返回str,如果长度为2进行补零操作 。
在这里插入图片描述
后面我单独写语句试验了下,确实如此
在这里插入图片描述在这里插入图片描述
网上了半天这个问题,也没人解释哈这个,是这个问题太简单了吗哭了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值