时间相关计算,格式化

js计算时间差封装函数

//yyyy-MM-dd HH:MM:SS   格式
function getNowFormatDate() {
    var date = new Date();
    var seperator1 = "-";
    var seperator2 = ":";
    var month = date.getMonth() + 1;
    var strDate = date.getDate();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }
    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }
    var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
            + " " + date.getHours() + seperator2 + date.getMinutes()
            + seperator2 + date.getSeconds();
    return currentdate;
}
//计算日期天数差
function diff(startDate, endDate){
    //startDate,endDate:yyyy-MM-dd
    var arr1 = startDate.split('-')
    var arr2 = endDate.split('-')
    var sDate = new Date(arr1[1] + '-' + arr1[2] + '-' + arr1[0])
    var eDate = new Date(arr2[1] + '-' + arr2[2] + '-' + arr2[0])
    var iDays = parseInt(Math.abs(sDate - eDate) / 1000 / 60 / 60 / 24)
    return iDays;
}

计算倒计时

设定的结束时间与当前时间的倒计时计算:距离结束还有,XX天XX时XX分XX秒

格式化

  1. 后端传回格式:2018-08-16T08:04:30.000Z
  2. 前端展示格式:2018-08-16 08:04:30
// 小于10的在前添加一个0
function formatNumber(n) {
  const str = n.toString();
  return str[1] ? str : `0${str}`;
}
function formatTime(date, dateJoin, noTime) {
  // date:时间,noTime: 1--只返回日期,0--连同返回时间,dateJoin: 日期的分隔符,默认为"/"
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();

  const hour = date.getHours();
  const minute = date.getMinutes();
  const second = date.getSeconds();

  const t1 = dateJoin ? [year, month, day].map(formatNumber).join(dateJoin) : [year, month, day].map(formatNumber).join("/");
  const t2 = [hour, minute, second].map(formatNumber).join(":");

  return noTime ? `${t1}` : `${t1} ${t2}`
}
var date = "2018-08-16T08:04:30.000Z"
var date1 = formatTime(new Date(date)) //date1: "2018/08/16 16:04:30"

浮点数计算的bug

  1. js计算:0.1+0.2=0.30000000000000004,解决:
/*判断obj是否为一个整数*/
function isInteger(obj){
   return Math.floor(obj) === obj;
}
/**
 * 将一个浮点数转换成整数,返回整数和倍数
 * 如 3.14 》》314  倍数是100
 *
 */
function toInteger(floatNum) {
  var ret = { times: 1, num: 0 };

  //是整数
  if (isInteger(floatNum)) {
    ret.num = floatNum;
    return ret;
  }

  var strfi = floatNum + "";
  //查找小数点的下标
  var dotPos = strfi.indexOf(".");
  console.log("dotPos====" + dotPos);
  //获取小数的位数
  var len = strfi.substr(dotPos + 1).length;
  console.log("len====" + len);
  //Math.pow(10,len)指定10的len次幂。
  var time = Math.pow(10, len);

  //将浮点数转化为整数
  var intNum = parseInt(floatNum * time + 0.5, 10);
  console.log("intNum====" + intNum);
  ret.times = time;
  ret.num = intNum;
  return ret;
}

/**
 *进行运算
 *三个参数分别是要运算的两个数和运算符
 */
function operation(a, b, op) {
  var o1 = toInteger(a);
  var o2 = toInteger(b);
  var n1 = o1.num;
  var n2 = o2.num;
  var t1 = o1.times;
  var t2 = o2.times;
  var max = t1 > t2 ? t1 : t2;
  var result = null;
  switch (op) {
    case "add":
      if (t1 === t2) {
        result = n1 + n2;
      } else if (t1 > t2) {
        result = n1 + n2 * (t1 / t2);
      } else {
        result = n1 * (t2 / t1) + n2;
      }

      return result / max;
      break;
    case "subtract":
      if (t1 === t2) {
        result = n1 - n2;
      } else if (t1 > t2) {
        result = n1 - n2 * (t1 / t2);
      } else {
        result = n1 * (t2 / t1) - n2;
      }

      return result / max;
      break;
    case "multiply":
      result = n1 * n2 / (t1 * t2);
      return result;
      break;
    case "divide":
      result = n1 / n2 / (t2 / t1);
      return result;
      break;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值