常用工具函数

1.有关file

/**
 * @功能描述: 求次幂
 * @参数:num = 1 代表 1024
 *       num = 2 代表 1024*1024
 *       num = 3 代表 1024*1024*1024 依次类推
 * @返回值:
 * @param {*} num
 */
const pow1024 = (num) => {
  return Math.pow(1024, num);
};

/**
 * @功能描述: byte单位换算
 * @参数: byte
 * @返回值:
 */
export const calcFileSize = (size) => {
  if (!size) return "";

  if (size < pow1024(1)) {
    return size + " B";
  }
  if (size < pow1024(2)) {
    return (size / pow1024(1)).toFixed(2) + " KB";
  }
  if (size < pow1024(3)) {
    return (size / pow1024(2)).toFixed(2) + " MB";
  }
  if (size < pow1024(4)) {
    return (size / pow1024(3)).toFixed(2) + " GB";
  }
  return (size / pow1024(4)).toFixed(2) + " TB";
};
// 文件下载
export const downloadFile = (url) => {
  // 移除旧的节点
  const oldNode = document.querySelector("#g-exportOrder-iframe");
  if (oldNode) {
    document.body.removeChild(document.querySelector("#g-exportOrder-iframe"));
  }

  // 生成新节点,进行下载
  const iframe = document.createElement("iframe");
  iframe.style.display = "none";
  iframe.id = "g-exportOrder-iframe";
  iframe.src = url;
  document.body.appendChild(iframe);
};
// 文件格式转换
// 将base64转换为blob(二进制)
export const dataURLtoBlob = (dataurl) => {
  var arr = dataurl.split(","),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: mime });
};
// 将blob转换为file
export const blobToFile = (theBlob, fileName) => {
  theBlob.lastModifiedDate = new Date();
  theBlob.name = fileName;
  return theBlob;
};

2.有关moment

/**
 * @功能描述: 格式化时间
 * @参数: date:时间戳number  pattern:格式
 * @返回值:
 */
export const dateFormat = (date, pattern = "YYYY-MM-DD HH:mm:ss") => {
  if (!date) return "";

  if (date.length < 12) {
    date = date * 1000;
  }

  return moment(date).format(pattern);
};
/**
 * @功能描述: 将时长(s)格式化为时分秒数
 * @参数: date:时长秒数  pattern:格式 时分秒/分秒
 * @返回值:
 */
export const formatSecond = (seconds, pattern = "HH:mm:ss") => {
  if (!seconds) return "";

  let after = moment({
    hour: 0,
    minute: 0,
    second: 0,
  })
    .add("seconds", seconds)
    .format(pattern);

  return after || "";
};
/**
 * @功能描述: 当前时间
 * @参数: date:时长秒数  pattern:格式 时分秒/分秒
 * @返回值:
 */
export const fetchCurrentTime = (pattern = "YYYY-MM-DD HH:mm") => {
  let now = moment().format(pattern);

  return now || "";
};
/**
 * @功能描述: 将GM时间格式化为字符串时间  ( 一般为日期选择器daterange情况下)
 * @参数: dateArr 数组  pattern:格式 时分秒/分秒
 * @返回值:
 */
export const getDateParams = (dateArr = [], pattern = "YYYY-MM-DD") => {
  return dateArr.map((ele) => {
    if (!ele) return;
    let time = String(new Date(ele).getTime());
    time.length > 10 && (time = time.slice(0, time.length - 3)); // 毫秒 => 秒级时间戳
    return dateFormat(time, pattern); // 格式化为YYYY-MM-DD
  });
};

const Common_Format_Type = "YYYY-MM-DD";

// 当前系统的时间往前推一天
export const LastDayDate = moment()
  .day(moment().day() - 1)
  .format(Common_Format_Type);
  
// 当前时间往前推一周
export const LastWeekDayDate = moment()
  .day(moment().day() - 7)
  .format(Common_Format_Type);

// 当前时间(包含今天)往前推一周
export const LastSixDayDate = moment()
  .day(moment().day() - 6)
  .format(Common_Format_Type);

// 当前系统的时间
export const TodayDate = moment().format(Common_Format_Type);

// 当前时间往前推两周的时间
export const LastTwoWeekDayDate = moment()
  .day(moment().day() - 14)
  .format(Common_Format_Type);

3.vue过滤器

在template中,用管道符 | 使用
例:{{ stampStr | dateformat }}

// 利用插值表达式调用
Vue.filter("dateformat", function (date, pattern = "YYYY-MM-DD HH:mm:ss") {
  if (!date) return "";
  let len = String(date).length;
  if (len < 12) {
    // 秒级时间戳转为毫秒级时间戳
    date = date * 1000;
  }

  return moment(date).format(pattern);
});

4.有关对象/数组

/**
 * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性
 * 如果没有传入key这个参数,则判断obj对象是否有键值对
 */
export const hasKey = (obj, key) => {
  if (key) return key in obj;
  else {
    let keysArr = Object.keys(obj);
    return keysArr.length;
  }
};

/**
 * @param {*} obj1 对象
 * @param {*} obj2 对象
 * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串
 */
export const objEqual = (obj1, obj2) => {
  const keysArr1 = Object.keys(obj1);
  const keysArr2 = Object.keys(obj2);
  if (keysArr1.length !== keysArr2.length) return false;
  else if (keysArr1.length === 0 && keysArr2.length === 0) return true;
  /* eslint-disable-next-line */ else
    return !keysArr1.some((key) => obj1[key] != obj2[key]);
};


// 判断两个简单类型数组是否相同
export const isEqualList = (arr1 = [], arr2 = []) => {
  let arrStr1 = JSON.stringify(arr1.sort());
  let arrStr2 = JSON.stringify(arr2.sort());
  let res = arrStr1 === arrStr2;

  return res;
};

其他

// 计算百分比
export const calcPercent = (currentSec, total) => {
  if (!currentSec) return "0%";

  let rate = ((currentSec / total) * 100).toFixed(2) + "%";

  return rate;
};

/**
 * @returns {String} 当前浏览器名称
 */
export const getExplorer = () => {
  const ua = window.navigator.userAgent;
  const isExplorer = exp => {
    return ua.indexOf(exp) > -1;
  };
  if (isExplorer("MSIE")) return "IE";
  else if (isExplorer("Firefox")) return "Firefox";
  else if (isExplorer("Chrome")) return "Chrome";
  else if (isExplorer("Opera")) return "Opera";
  else if (isExplorer("Safari")) return "Safari";
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值