时间戳转换进阶方法

前言

时间戳的处理在前端并不少。可是真正好用的格式化时间戳却不好用。下面总结一个个人觉得比较好的方法。

实现的效果:

在这里插入图片描述

先上一份比较简陋的文档:
在这里插入图片描述

正如你所见, 时间戳可以根据自己的格式转换成想要的字符串。当然在这个方法中还有其他的内置的方法,等下会讲到

附上源码

/**
 * 时间戳转换为对象 (new Date()) => (timeObject)
 * @param  {Number}   time   传入原时间
 * @return {Object}   object 转换后的时间戳,和时间对象
 */
function timeToDateObj(time = new Date().getTime()) {
  let date = new Date(),
    weeks_ch = ["日", "一", "二", "三", "四", "五", "六"]
  date.setTime(time)
  return {
    time: time,
    day: date.getDate(),
    month: date.getMonth() + 1,
    year: date.getFullYear(),
    week: weeks_ch[date.getDay()],
    hours: date.getHours(),
    minutes: date.getMinutes(),
    seconds: date.getSeconds(),
    hoursStr: (date.getHours() / 100).toFixed(2).split(".")[1],
    minutesStr: (date.getMinutes() / 100).toFixed(2).split(".")[1],
    secondsStr: (date.getSeconds() / 100).toFixed(2).split(".")[1]
  }
}

/**
 * 数字前置补零
 * @param  {Number}  num     传入的数字
 * @param  {Number}  length  需要的长度。默认2位
 * @return {Number}  num     转换好的数字
 */
function digit(num, length) {
  let str = ""
  num = String(num)
  length = length || 2
  for (var i = num.length; i < length; i++) {
    str += "0"
  }
  return num < Math.pow(10, length) ? str + (num | 0) : num
}

/**
 * 格式化时间戳
 * @param  {Number}    time           需要转换的时间戳。默认当前时间
 * @param  {String}    format         时间格式 默认 yyyy-mm-dd HH:ii:ss
 * @return {String}    timeStr        格式化后的字符串
 */
function formateTime(time = new Date().getTime(), format = "yyyy-mm-dd hh:ii:ss") {
  // 转换时间对象
  let timeObj = timeToDateObj(time),
    dateType = "yyyy|y|mm|m|dd|d|hh|h|ii|i|ss|s"
  // 正则
  format = format.toLocaleLowerCase().match(new RegExp(dateType + "|.", "g")) || []

  format.forEach((v, i) => {
    if (/yyyy|y/.test(v)) {
      //年
      format[i] = digit(timeObj.year, v.length)
    } else if (/mm|m/.test(v)) {
      //月
      format[i] = digit(timeObj.month, v.length)
    } else if (/dd|d/.test(v)) {
      //日
      format[i] = digit(timeObj.day, v.length)
    } else if (/hh|h/.test(v)) {
      //时
      format[i] = digit(timeObj.hours, v.length)
    } else if (/ii|i/.test(v)) {
      //分
      format[i] = digit(timeObj.minutes, v.length)
    } else if (/ss|s/.test(v)) {
      //秒
      format[i] = digit(timeObj.seconds, v.length)
    }
  })
  return format.join("")
}

内置方法的介绍:

时间戳转时间对象 - timeToDateObj:

时间戳转换为时间对象(也是传入时间戳。不传默认就是当前时间)

console.log(timeToDateObj());
// 打印得到如下对象
{
  day:27
  hours:14
  hoursStr:"14"
  minutes:13
  minutesStr:"13"
  month:2
  seconds:49
  secondsStr:"49"
  time:1551248029765
  week:"三"
  year:2019
}

数字前置补0 - digit:

参数1:需要处理的数字 {必填}

参数2:需要转换的长度 {非必填 | 默认为 2}

console.log(digit(1, 2)); // 01
console.log(digit(1, 3)); // 001

// 输入数字为1  需要转换长度为2  所以输出为  01
// 如果输入为1  需要转换长度为3  则输出     001

以上就是时间戳处理个人觉得比较好的方法。具体的代码可以参考 layui的日期控件

发布了67 篇原创文章 · 获赞 55 · 访问量 16万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览