js常用工具函数

一、与时间处理相关

1、将当前的日期时间 转为“yyyy-MM-dd HH:MM:SS”格式

function getNowTimesFormate (s1, s2, date) {
  if (date == null) {
    date = new Date()
  }
  var seperator1 = '-'
  if (s1 != null) {
    seperator1 = s1
  }
  var seperator2 = ':'
  if (s2 != null) {
    seperator2 = s2
  }
  var month = date.getMonth() + 1
  var strDate = date.getDate()
  var strHours = date.getHours()
  var strMinutes = date.getMinutes()
  var strSeconds = date.getSeconds()
  if (month >= 1 && month <= 9) {
    month = '0' + month
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = '0' + strDate
  }
  if (strHours >= 0 && strHours <= 9) {
    strHours = '0' + strHours
  }
  if (strMinutes >= 0 && strMinutes <= 9) {
    strMinutes = '0' + strMinutes
  }
  if (strSeconds >= 0 && strSeconds <= 9) {
    strSeconds = '0' + strSeconds
  }
  var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + ' ' + strHours + seperator2 + strMinutes + seperator2 + strSeconds
  return currentdate
}

2、格式化时间戳123142361为“yyyy.mm.dd hh.mm.ss”

function formateTimestamphms (timeStamp) {
  const date = new Date(timeStamp)
  const Y = date.getFullYear() + '.'
  const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '.'
  const D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getMonth()) + ' '
  const h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'
  const m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'
  const s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds())
  const formateTimestamphms = Y + M + D + h + m + s

  return formateTimestamphms
}

3、计算出两个时间的时间差

返回格式可自行拼接,若startDate和endDate均为时间戳可以直接使用该方法,如果startDate和endDate为格式化好的时间需要先将其转化为时间戳

function mistiming (startDate, endDate) {
  const total = (endDate - startDate) / 1000
  var day;
  var hour;
  var min;
  var seconds;

  day = parseInt(total / (24 * 60 * 60)) // 计算整数天数
  var afterDay = total - day * 24 * 60 * 60 // 取得算出天数后剩余的秒数
  hour = parseInt(afterDay / (60 * 60)) // 计算整数小时数
  var afterHour = total - day * 24 * 60 * 60 - hour * 60 * 60 // 取得算出小时数后剩余的秒数
  min = parseInt(afterHour / 60) // 计算整数分
  seconds = parseInt(total - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60) // 取得算出分后剩余的秒数

  if (day < 10) {
    day = '0' + day;
  }

  if (hour < 10) {
    hour = '0' + hour;
  }

  if (min < 10) {
    min = '0' + min;
  }

  if (seconds < 10) {
    seconds = '0' + seconds;
  }

  const restTime = {
    day: day,
    hour: hour,
    min: min,
    seconds: seconds
  }
  return restTime
}

二、url处理方法

1、 拼接多个params参数

queryConfig为json格式,举例:
queryConfig:{
key1: val1,
key2: val2
},
经过处理的_str为:key1=val1&key2=val2
这个方法一般适用于拼接多个参数到url上的时候

function jointParams (queryConfig) {
  var _str = ''
  for (var o in queryConfig) {
    if (queryConfig[o] != -1) {
      _str += o + '=' + queryConfig[o] + '&'
    }
  }
  _str = _str.substring(0, _str.length - 1)
  return _str
}

2、获取url中的参数

这个方法返回的data为json格式,举例:
如果url为
id=1&page=2&demo=xxx
那么返回的data为:
data :{
id: 1,
page: 2,
demo: xxx
}

  /** 
   *@description 字符串转json
   * @param str key1=val1&key2=val2
   * @returns {key1:val1, key2:val2}
  */
  
  const getUrlParams = (str) => {
    let query = {};
    const params = str.split("&");
    params.forEach((p) => {
      const items = p.split("=");
      if (items.length == 2) {
        query[items[0]] = decodeURIComponent(items[1]);
      }
    });
    return query;
  };

三、移动端与原生之间的环境判断

1、 判断是否为ios端访问(一般用于移动端开发与ios有交互的时候)

function _IsIOS () {
  if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
    return true
  } else {
    return false
  }
}

2、 判断是否为android端访问(一般用于移动端开发与安卓有交互的时候)

function _IsAndroid () {
  if (/(Android|Adr)/i.test(navigator.userAgent)) {
    return true
  } else {
    return false
  }
}

3、判断是否移动端

function isMobile () {
    if(/Android|webOS|iPhone|iPad|BlackBerry/i.test(navigator.userAgent)) {
        return true;
    } else {
        return false;
    }
}

4、判断是否在微信内

function isWeixin () {
    var ua = navigator.userAgent.toLowerCase();
    return ua.match(/MicroMessenger/i) == "micromessenger";
};

四、验证身份证号是否合法(这种方式是严格验证,会验证最后一位校验位是否正确)

	function isCardNo (num) {
      num = num.toUpperCase();
      // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
      if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X');
        return false;
      }
      // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
      // 下面分别分析出生日期和校验位
      var len, re;
      len = num.length;
      if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        // 检查生日日期是否正确
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
          alert('输入的身份证号里出生日期不对!');
          return false;
        } else {
          // 将15位身份证转成18位
          // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
          var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
          var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
          var nTemp = 0, i;
          num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i];
          }
          num += arrCh[nTemp % 11];
          return true;
        }
      }
      if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        // 检查生日日期是否正确
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
          // alert(dtmBirth.getYear());
          //  alert(arrSplit[2]);
          alert('输入的身份证号里出生日期不对!');
          return false;
        }
        else {
          // 检验18位身份证的校验码是否正确。
          // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
          var valnum;
          var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
          var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
          var nTemp = 0, i;
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i];
          }
          valnum = arrCh[nTemp % 11];
          if (valnum != num.substr(17, 1)) {
            alert('18位身份证的校验码不正确!');
            return false;
          }
          return true;
        }
      }
      return false;
	},

五、验证手机号是否合法

function verify_phone_number (mobile){
    if (!(/^[1][0-9]{10}$/.test(mobile))) {
        alert('手机号错误,请重新输入');
        return false;
    } else {
        return true;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值