javascript常用方法及功能实现,持续更新

一、iframe及时刷新

        假设有个地址https://xxx,需要将这个地址嵌入到我们的系统中,通常会使用iframe。笔者为了方便,这里使用vue记录:

<iframe id="agreeFrame" name="agreeFrame" :src="frameUrl" frameborder="0" scrolling="yes"></iframe>
//...
    frameUrl: "https://xxx",
//...
#agreeFrame {
    width: 100%;
    height: 100%;
}

        当https://xxx的内容变更后,系统不能及时的更新页面,为了解决这个问题,可以在https://xxx后加个随机数:

this.frameUrl ="http://xxx?r=" + Math.random();

二、倒计时

        入参为时间差的毫秒数:

export const timeFn = (dateDiff) => {
  //计算出相差天数
  let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));
  let hoursCount = dateDiff % (24 * 3600 * 1000);
  let hours = Math.floor(hoursCount / (3600 * 1000));
  // 计算相差分钟数
  let minutesCount = leave1 % (3600 * 1000);
  let minutes = Math.floor(minutesCount / (60 * 1000));
  // 计算相差秒数
  let secondsCount = leave2 % (60 * 1000);
  let seconds = Math.round(secondsCount / 1000);
  let str = "";
  if (dayDiff > 0) {
    str += dayDiff + "天";
  }
  if (hours > 0) {
    str += hours + "小时";
  }
  if (minutes > 0) {
    str += minutes + "分钟";
  }
  str += seconds + "秒";
  return str;
};

三、日期格式化

export const dateFormat = (fmt, date) => {
  if (!date || date == null) return "";
  let ret;
  var tmpDate = new Date(date);
  const opt = {
    "Y+": tmpDate.getFullYear().toString(), // 年
    "M+": (tmpDate.getMonth() + 1).toString(), // 月
    "D+": tmpDate.getDate().toString(), // 日
    "h+": tmpDate.getHours().toString(), // 时
    "m+": tmpDate.getMinutes().toString(), // 分
    "s+": tmpDate.getSeconds().toString(), // 秒
  };
  for (let k in opt) {
    ret = new RegExp("(" + k + ")").exec(fmt);
    if (ret) {
      fmt = fmt.replace(
        ret[1],
        ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0")
      );
    }
  }
  return fmt;
};

例如:

dateFormat('YYYY-MM-DD',new Date())

dateFormat('YYYY-MM-DD hh:mm:ss',new Date())

dateFormat('YYYY/MM/DD',new Date())

dateFormat('hh:mm:ss',new Date())

四、银行家算法

4.1 保留两位小数点

export function keepTwoDecimalFull(num1) {
  let num = Number(num1);
  let result = parseFloat(num);
  if (isNaN(result)) {
    return 0;
  }
  result = Math.round(num * 100) / 100;
  let s_x = result.toString();
  let pos_decimal = s_x.indexOf(".");
  if (pos_decimal < 0) {
    pos_decimal = s_x.length;
    s_x += ".";
  }
  while (s_x.length <= pos_decimal + 2) {
    s_x += "0";
  }
  return s_x;
}

4.2 银行家算法

export function bankTwoDecimal(num) {
  let old = Number(num);
  let oldstr = old.toString();
  let start = oldstr.indexOf(".");
  let newNum = "";
  if (start > 0 && oldstr.split(".")[1].length == 3) {
    let a1 = Math.pow(10, 2) * old;
    a1 = Math.round(a1);
    if (oldstr.substr(start + 3, 1) == 5) {
      let flagval = oldstr.substr(start + 2, 1) - 0;
      if (flagval % 2 == 0) {
        a1 = a1 - 1;
      }
    }
    newNum = a1 / Math.pow(10, 2);
  } else {
    newNum = old;
  }
  return keepTwoDecimalFull(newNum);
}

五、加减乘除精度运算

5.1 加法

export const accAdd = (arg1, arg2) => {
  var r1, r2, m;
  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));
  return ((arg1 * m + arg2 * m) / m).toFixed(2);
};

5.2 减法

export const accSubtr = (arg1, 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));
  //动态控制精度长度
  n = r1 >= r2 ? r1 : r2;
  return ((arg1 * m - arg2 * m) / m).toFixed(n);
};

5.3 乘法

export const accMul = (arg1, 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)
  );
};

5.4 除法

export const accDiv = (arg1, arg2) => {
  var t1 = 0,
    t2 = 0,
    r1,
    r2;
  try {
    t1 = arg1.toString().split(".")[1].length;
  } catch (e) {}
  try {
    t2 = arg2.toString().split(".")[1].length;
  } catch (e) {}
  r1 = Number(arg1.toString().replace(".", ""));
  r2 = Number(arg2.toString().replace(".", ""));
  return (r1 / r2) * Math.pow(10, t2 - t1);
};

猜你喜欢

转载自blog.csdn.net/sxww_zyt/article/details/130865665
今日推荐