js 实现时间相关的转换函数

这个博客分享了JavaScript中用于时间格式化、时间转换、时间差显示以及音视频时间格式化的实用函数。包括将时间戳转换为指定格式的日期字符串,计算并显示与当前时间的时间差,以及音视频时长的格式化方法。
摘要由CSDN通过智能技术生成

1、一般用于表格中的时间显示

/**
 * 表格时间格式化
 */
export function formatDate(cellValue) {
  if (cellValue == null || cellValue == "") return "";
  var date = new Date(cellValue);
  var year = date.getFullYear();
  var month =
    date.getMonth() + 1 < 10
      ? "0" + (date.getMonth() + 1)
      : date.getMonth() + 1;
  var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
  var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
  var minutes =
    date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
  var seconds =
    date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
  return (
    year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds
  );
}

2、可自定传入格式的时间转换,默认为 横杠分隔,比如“2022-08-24 14:32:00"

export function parseTime(time, pattern) {
  if (arguments.length === 0 || !time) {
    return null;
  }
  const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
  let date;
  if (typeof time === "object") {
    date = time;
  } else {
    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
      time = parseInt(time);
    } else if (typeof time === "string") {
      time = time.replace(new RegExp(/-/gm), "/");
    }
    if (typeof time === "number" && time.toString().length === 10) {
      time = time * 1000;
    }
    date = new Date(time);
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  };
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key];
    // Note: getDay() returns 0 on Sunday
    if (key === "a") {
      return ["日", "一", "二", "三", "四", "五", "六"][value];
    }
    if (result.length > 0 && value < 10) {
      value = "0" + value;
    }
    return value || 0;
  });
  return time_str;
}

// 日期格式化--- 当前时间减一天以后加 n 月
export function parseTime2(time, pattern, monthNum) {
  if (arguments.length === 0 || !time) {
    return null;
  }
  const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
  let date;
  if (typeof time === "object") {
    date = time;
  } else {
    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
      time = parseInt(time);
    } else if (typeof time === "string") {
      time = time.replace(new RegExp(/-/gm), "/");
    }
    if (typeof time === "number" && time.toString().length === 10) {
      time = time * 1000;
    }
    date = new Date(time);
  }
  let double = (monthNum / 12).toString().split(".");
  let n = Math.floor(monthNum / 12);
  const formatObj = {
    y: date.getFullYear() + n,
    m:
      double.length > 1
        ? date.getMonth() + Number(double[1]) + 2
        : date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  };
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key];
    // Note: getDay() returns 0 on Sunday
    if (key === "a") {
      return ["日", "一", "二", "三", "四", "五", "六"][value];
    }
    if (result.length > 0 && value < 10) {
      value = "0" + value;
    }
    return value || 0;
  });
  return time_str;
}

3、传入时间,返回 “几分钟前、几天前等”

export function formatTime(time, option) {
  if (("" + time).length === 10) {
    time = parseInt(time) * 1000;
  } else {
    time = +time;
  }
  const d = new Date(time);
  const now = Date.now();

  const diff = (now - d) / 1000;

  if (diff < 30) {
    return "刚刚";
  } else if (diff < 3600) {
    // less 1 hour
    return Math.ceil(diff / 60) + "分钟前";
  } else if (diff < 3600 * 24) {
    return Math.ceil(diff / 3600) + "小时前";
  } else if (diff < 3600 * 24 * 2) {
    return "1天前";
  }
  if (option) {
    return parseTime(time, option);
  } else {
    return (
      d.getMonth() +
      1 +
      "月" +
      d.getDate() +
      "日" +
      d.getHours() +
      "时" +
      d.getMinutes() +
      "分"
    );
  }
}
// 传入的是 以秒为单位的时间
export function formatMsgTime(timespan) {
  if (timespan === null) {
    return "";
  }
  // var second = dateTime.getSeconds()
  var millisecond = timespan * 1000; // 将当前编辑的时间转换为毫秒
  var now = new Date(); // 获取本机当前的时间
  var nowNew = now.getTime(); // 将本机的时间转换为毫秒
  var milliseconds = 0;
  var timeSpanStr;
  milliseconds = nowNew - millisecond;
  if (milliseconds <= 1000 * 60 * 1) {
    // 小于一分钟展示为刚刚
    timeSpanStr = "刚刚";
  } else if (1000 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60) {
    // 大于一分钟小于一小时展示为分钟
    timeSpanStr = Math.round(milliseconds / (1000 * 60)) + "分钟前";
  } else if (
    1000 * 60 * 60 * 1 < milliseconds &&
    milliseconds <= 1000 * 60 * 60 * 24
  ) {
    // 大于一小时小于一天展示为小时
    timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60)) + "小时前";
  } else {
    // 大于一天展示为天
    timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60 * 24)) + "天前";
  }
  return timeSpanStr;
}

4、音视频的时间转化

//音视频时长时间格式化(00:00:00)格式 参数:毫秒
export function MillisecondToDate(msd) {
  let time = parseFloat(msd) / 1000;
  if (null != time && "" !== time) {
    if (time >= 60 && time < 60 * 60) {
      let minute = parseInt(time / 60.0) + "";
      let second =
        parseInt((parseFloat(time / 60.0) - parseInt(time / 60.0)) * 60) + "";
      time = minute.padStart(2, "0") + ":" + second.padStart(2, "0");
    } else if (time >= 60 * 60 && time < 60 * 60 * 24) {
      let hour = parseInt(time / 3600.0) + "";
      let minute =
        parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) +
        "";
      let second =
        parseInt(
          (parseFloat(
            (parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60
          ) -
            parseInt(
              (parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60
            )) *
            60
        ) + "";
      time =
        hour.padStart(2, "0") +
        ":" +
        minute.padStart(2, "0") +
        ":" +
        second.padStart(2, "0");
    } else {
      let temp = parseInt(time) + "";
      time = temp.padStart(5, "00:00");
    }
  } else {
    time = "00:00";
  }
  return time;
}
//音视频时长时间格式化(00:00:00)格式 参数:秒
export function secondsToTime(time) {
  if (!time) {
    return "00:00:00";
  }
  var hours = Math.floor(time / 3600) % 24,
    minutes = Math.floor(time / 60) % 60,
    seconds = Math.floor(time % 60),
    // result =
    //   (hours > 0 ? (hours < 10 ? "0" + hours : hours) + ":" : "") +
    //   (minutes < 10 ? "0" + minutes : minutes) +
    //   ":" +
    //   (seconds < 10 ? "0" + seconds : seconds);
    result =
      (hours < 10 ? "0" + hours : hours) +
      ":" +
      (minutes < 10 ? "0" + minutes : minutes) +
      ":" +
      (seconds < 10 ? "0" + seconds : seconds);

  return result;
}
//毫秒转时间格式(00:00.646) 参数:毫秒,用于时间不大于小时
export function millsecondToTime(time) {
  if (time === 0) {
    return "00:00.000";
  }
  if (time < 60000) {
    return "00:" + checkTime((time / 1000).toFixed(3));
  }
  var minutes = Math.floor(time / 60000),
    seconds = ((time % 60000) / 1000).toFixed(3),
    result = checkTime(minutes) + ":" + checkTime(seconds);
  return result;
}
//秒转时间格式(00:00) 参数:秒,字符串转换
export function secondToTimeStr(time) {
  if (time === 0) {
    return "00:00";
  }
  if (time < 60) {
    return "00:" + checkTime(time);
  }
  var minutes = Math.floor(time / 60),
    seconds = time % 60,
    result = checkTime(minutes) + ":" + checkTime(seconds);
  return result;
}
//秒转时间格式(00:00:00) 参数:秒,字符串转换
export function secondToTimeStr2(time) {
  if (time === 0 || !time) {
    return "00:00:00";
  }
  if (time < 60) {
    return "00:00:" + checkTime(time);
  }
  var hours = Math.floor(time / 3600),
    minutes = Math.floor((time / 60) % 60),
    seconds = time % 60,
    result =
      checkTime(hours) + ":" + checkTime(minutes) + ":" + checkTime(seconds);
  return result;
}
// 字符串("03:12.162")转时间戳192162
export function timeStrToMillsecond(timeStr) {
  let minute = timeStr.split(":")[0];
  let second = timeStr.split(":")[1];
  let result = parseInt(minute) * 60000 + parseFloat(second) * 1000;
  return result;
}
//时间小于10  在前面补零操作方法
function checkTime(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值