let Util = {
  // 手机号隐藏中间四位
  phoneNumberEncryption(phoneNum) {
    return phoneNum.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
  },

  // 身份证显示前三位以及后四位，中间用 * 代替
  identityCardEncryption(_Id_Card) {
    var _str_Start = _Id_Card.substr(0, 3);
    var _str_End = _Id_Card.substr(14, 4);
    var _ss = function () { var s = ""; for (var i = 0; i < 18 - 7; i++) s += "*"; return s; };
    var _str_Res = _str_Start + _ss() + _str_End;
    return _str_Res;
    // 身份证显示前两位以及出生年月
    // return IDCord.replace(/(\w)/g,function(a,b,c,d){return ((c>1&&c<6)||c>(IDCord.length-5))?'*':a});
  },

  // 去除字符串中的空格
  removeSpacesFromString(phoneNum) {
    return phoneNum.replace(/\s*/g, '');
  },

  // 给手机号添加空格
  phoneAddGap(phoneNum) {
    let regPhoneNum = phoneNum.replace(/(\d{3})(\d{4})/, "$1 $2 ");  //添加空格
    return regPhoneNum;
  },

  // 通过身份证号获取年龄大小
  calculateAge(certificateNum, isDay) {
    let len = certificateNum ? certificateNum.length : 0
    let birthYearSpan = len === 15 ? 2 : 4;
    let year = (birthYearSpan === 2 ? '19' : '') + certificateNum.substr(6, birthYearSpan);
    let month = certificateNum.substr(6 + birthYearSpan, 2);
    let day = certificateNum.substr(8 + birthYearSpan, 2);

    let now = new Date();
    let monthFloor = ((now.getMonth() + 1) < parseInt(month, 10) || ((now.getMonth() + 1) === parseInt(month, 10) && now.getDate() < parseInt(day, 10))) ? 1 : 0;
    let age = now.getFullYear() - parseInt(year, 10) - monthFloor;

    if (isDay === "yes") { // 如果龄小于1岁需要输出天数则   isDay   传   yes
      if (age === 0) {
        //年龄小于1岁，计算天数。注意：此处必须使用new Date('yyyy/mm/dd')这种格式，将字符串转换为Date类型。
        // 如果用 new Date('yyyy-mm-dd')这种，会存在兼容性问题，在Chrome下好使，其它浏览器不好使。
        // 可以采用new Date(Date.parse(str.replace(/-/g,"/")))将yyyy-mm-dd转换为yyyy/mm/dd。
        let diffDay = Math.floor((new Date().getTime() - new Date(year + '/' + month + '/' + day + " 00:00:00").getTime()) / (24 * 60 * 60 * 1000));
        return diffDay + "天";
      } else {
        return age + "岁";
      }
    } else {
      return age
    }
  },

  // 截取出字符冲中route、code以及start对应的值
  interceptTheValueOfTheURL(url, type, symbol, childSymbol) {
    if (url && url.indexOf(symbol) !== -1) {
      let arr = url.split(symbol);
      console.log(url)
      for (var i = 0; i < arr.length; i++) {
        if (arr[i].split(childSymbol)[0] === type) {
          if (url.indexOf("#") !== -1) {
            return arr[i].split(childSymbol)[1].split("#")[0];
          } else {
            return arr[i].split(childSymbol)[1];
          }
        }
      }
    } else {
      if (url && url.indexOf(":") !== -1) {
        return url.split(":")[1]
      } else {
        return ""
      }
    }
  },

  // 近一个月日期
  getLastMonth() {
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth() + 1;//0-11表示1-12月
    var day = now.getDate();
    var dateObj = {};
    dateObj.now = year + '-' + month + '-' + day;
    var nowMonthDay = new Date(year, month, 0).getDate();    //当前月的总天数
    if (month - 1 <= 0) { //如果是1月，年数往前推一年<br>　　　　 
      dateObj.last = (year - 1) + '-' + 12 + '-' + day;
    } else {
      var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();
      if (lastMonthDay < day) {    //1个月前所在月的总天数小于现在的天日期
        if (day < nowMonthDay) {        //当前天日期小于当前月总天数
          dateObj.last = year + '-' + (month - 1) + '-' + (lastMonthDay - (nowMonthDay - day));
        } else {
          dateObj.last = year + '-' + (month - 1) + '-' + lastMonthDay;
        }
      } else {
        dateObj.last = year + '-' + (month - 1) + '-' + day;
      }
    }
    return dateObj;
  },

  // 近一周
  getLastWeek() {
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth() + 1;//0-11表示1-12月
    var day = now.getDate();
    var dateObj = {};
    dateObj.now = year + '-' + month + '-' + day;
    if (day - 7 <= 0) {   //如果在当月7日之前
      var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();    //1周前所在月的总天数
      if (month - 1 <= 0) { //如果在当年的1月份
        dateObj.last = (year - 1) + '-' + 12 + '-' + (31 - (7 - day));
      } else {
        dateObj.last = year + '-' + (month - 1) + '-' + (lastMonthDay - (7 - day));
      }
    } else {
      dateObj.last = year + '-' + month + '-' + (day - 7);
    }
    return dateObj;
  },

  // 根据对象中的某个属性过滤数组对象
  uniqArr(data, keys) {
    let newArr = [];
    let objTemp = {};
    for (let i = 0; i < data.length; i++) {
      if (!objTemp[data[i][keys]]) {
        objTemp[data[i][keys]] = true;
        newArr.push(data[i]);
      }
    }
    return newArr;
  },

  debounce(fn, delay) {
    var timeout = null; // 创建一个标记用来存放定时器的返回值
    return function (e) {
      // 每当用户输入的时候把前一个 setTimeout clear 掉
      clearTimeout(timeout); 
      // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发，就不会执行 fn 函数
      timeout = setTimeout(() => {
        fn.apply(this, arguments);
      }, delay ? delay : 300);
    }
  }
}

module.exports = { Util };
