摘取一些项目utils (持续更新)

上代码

// 获取当前日期
const today = () => {
  let myDate = new Date()
  let year = myDate.getFullYear() // 年
  let month = myDate.getMonth() + 1 >= 10 ? myDate.getMonth() + 1 : `0${myDate.getMonth() + 1}`// 月
  let day = myDate.getDate() // 日
  let hours = myDate.getHours() // 时
  let minutes = myDate.getMinutes() // 分
  let seconds = myDate.getSeconds() // 秒
  let time = myDate.getTime() // 时间戳
  return {
    year,
    month,
    day,
    hours,
    minutes,
    seconds,
    time
  }
}
/**
 * 数字转成汉字
 * @params num === 要转换的数字
 * @return 汉字
 * */
const toChinesNum:string = (num: number) => {
  let changeNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
  let unit = ["", "十", "百", "千", "万"];
  num = parseInt(num);
  let getWan = (temp) => {
    let strArr = temp.toString().split("").reverse();
    let newNum = "";
    let newArr = [];
    strArr.forEach((item, index) => {
      newArr.unshift(
        item === "0" ? changeNum[item] : changeNum[item] + unit[index]
      );
    });
    let numArr = [];
    newArr.forEach((m, n) => {
      if (m !== "零") numArr.push(n);
    });
    if (newArr.length > 1) {
      newArr.forEach((m, n) => {
        if (newArr[newArr.length - 1] === "零") {
          if (n <= numArr[numArr.length - 1]) {
            newNum += m;
          }
        } else {
          newNum += m;
        }
      });
    } else {
      newNum = newArr[0];
    }

    return newNum;
  };
  let overWan = Math.floor(num / 10000);
  let noWan: string | number = num % 10000;
  if (noWan.toString().length < 4) {
    noWan = "0" + noWan;
  }
  return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num);
};

/**
 * 日期转换汉字
 * @params dateStr 日期 '2023-01-09'
 * @return 二〇二三年一月九日
 * */
const convertChineseDate: string = (dateStr: string) => {
  let date = new Date(dateStr);
  let chinese = ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
  let y = date.getFullYear().toString();
  let m = (date.getMonth() + 1).toString();
  let d = date.getDate().toString();
  let result = "";
  //年
  for (let i = 0; i < y.length; i++) {
    result += chinese[y.charAt(i)];
  }
  result += "年";
  //月
  if (m.length == 2) {
    let temp = "十";
    if (m.charAt(1) != "0") {
      temp += chinese[m.charAt(1)];
    }
    result += temp;
  } else {
    result += chinese[m];
  }
  result += "月";
  //日
  if (d.length == 2) {
    let temp = "";
    if (d.charAt(0) != "1") {
      temp += chinese[d.charAt(0)];
    }
    temp += "十";
    if (d.charAt(1) != "0") {
      temp += chinese[d.charAt(1)];
    }
    result += temp;
  } else {
    result += chinese[d];
  }
  result += "日";
  return result;
};

/**
 * 获取该树形节点的所有父级节点
 * @params data 树形数据
 * @params id 树形节点标识
 * @params key 需要对比的key(不用可删掉)
 * @return [查询的节点数据,父级1节点,父级2节点]
 * */
const getParentCheckStatus:any = (data: any, id: string, key: string)=> {
  for(let i in data){
    if(data[i].id == id){
      return [data[i]]
    }
    if(data[i].children.length>0){
      let node = getParentCheckStatus(data[i].children, id, key)
      if(node != undefined){
        return node.concat(data[i])
      }
    }
  }
}

/**
 ** 加法函数,用来得到精确的加法结果
 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
 ** 调用:accAdd(arg1,arg2)
 ** 返回值:arg1加上arg2的精确结果
 **/
const accAdd = (arg1, arg2) => {
  if (isNaN(arg1)) {
    arg1 = 0;
  }
  if (isNaN(arg2)) {
    arg2 = 0;
  }
  arg1 = Number(arg1);
  arg2 = Number(arg2);
  var r1, r2, m, c;
  try {
    r1 = arg1.toString().split(".")[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  c = Math.abs(r1 - r2);
  m = Math.pow(10, Math.max(r1, r2));
  if (c > 0) {
    var cm = Math.pow(10, c);
    if (r1 > r2) {
      arg1 = Number(arg1.toString().replace(".", ""));
      arg2 = Number(arg2.toString().replace(".", "")) * cm;
    } else {
      arg1 = Number(arg1.toString().replace(".", "")) * cm;
      arg2 = Number(arg2.toString().replace(".", ""));
    }
  } else {
    arg1 = Number(arg1.toString().replace(".", ""));
    arg2 = Number(arg2.toString().replace(".", ""));
  }
  return (arg1 + arg2) / m;
};

/**
 ** 减法函数,用来得到精确的减法结果
 ** 说明:javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。
 ** 调用:accSub(arg1,arg2)
 ** 返回值:arg1加上arg2的精确结果
 **/
const accSub = (arg1, arg2) => {
  if (isNaN(arg1)) {
    arg1 = 0;
  }
  if (isNaN(arg2)) {
    arg2 = 0;
  }
  arg1 = Number(arg1);
  arg2 = Number(arg2);

  var r1, r2, m, n;
  try {
    r1 = arg1.toString().split(".")[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
  n = r1 >= r2 ? r1 : r2;
  return ((arg1 * m - arg2 * m) / m).toFixed(n);
};

/**
 ** 乘法函数,用来得到精确的乘法结果
 ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
 ** 调用:accMul(arg1,arg2)
 ** 返回值:arg1乘以 arg2的精确结果
 **/
const accMul = (arg1, arg2) => {
  if (isNaN(arg1)) {
    arg1 = 0;
  }
  if (isNaN(arg2)) {
    arg2 = 0;
  }
  arg1 = Number(arg1);
  arg2 = Number(arg2);

  var m = 0,
    s1 = arg1.toString(),
    s2 = arg2.toString();
  try {
    m += s1.split(".")[1].length;
  } catch (e) {}
  try {
    m += s2.split(".")[1].length;
  } catch (e) {}
  return (
    (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
    Math.pow(10, m)
  );
};

/**
 ** 除法函数,用来得到精确的除法结果
 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
 ** 调用:accDiv(arg1,arg2)
 ** 返回值:arg1除以arg2的精确结果
 **/
const accDiv = (arg1, arg2) => {
  let r1, r2, m1, m2, t1, t2;
  let reg = /^\d+$|^\d+[.]?\d+$/;
  if (reg.test(arg1) && reg.test(arg2)) {
    r1 = arg1.toString();
    r2 = arg2.toString();
  } else {
    return false; //请输入数字
  }
  if (r1.indexOf(".") != -1) {
    m1 = r1.split(".")[1].length;
  } else {
    m1 = 0;
  }
  if (r2.indexOf(".") != -1) {
    m2 = r2.split(".")[1].length;
  } else {
    m2 = 0;
  }
  t1 = Number(r1.replace(".", ""));
  t2 = Number(r2.replace(".", ""));
  return (t1 / t2) * Math.pow(10, m2 - m1);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

D丶bird

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值