常用工具函数

/*
 * 根据两地经纬度获取距离 
 */
function getDistance(lat1, lng1, lat2, lng2){
  let radLat1 = lat1 * Math.PI / 180.0;// 纬度转化成弧度
  let radLat2 = lat2 * Math.PI / 180.0;
  let a = radLat1 - radLat2;
  let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;// 经度差
  let distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))*6378.137;// 地球的半径为6378.137km
 console.log(parseInt(distance * 1000))
  return parseInt(distance * 1000);// 返回米数
}


/*
  保留两位小数 不四舍五入
 * @param {*} num 可带+-号
 * @param {*} decimal 保留小数点位数
 */
function keepTwoNum(num,decimal){
    num = num + "";
    var str = "";
    if (num.indexOf("+") >= 0) {
      str = "+";
    } else if (num.indexOf("-") >= 0) {
      str = "";
    } else {
      str = "";
    }
    num = num.toString();
    // decimal= decimal || 2;
    decimal = decimal == "0" ? 0 : Number(decimal) || 2;
    let index = num.indexOf(".");
    if (index !== -1) {
      num = num.substring(0, decimal + index + 1);
    } else {
      num = num.substring(0);
    }
    let resultNumber=str + parseFloat(num).toFixed(decimal)
    return resultNumber;
}
keepTwoNum(54.99,"1")


  // 获取其他日期 
//参数格式 ’-/+ number‘  如 前七天 getOrderDaysDate(-7) 后三天 getOrderDaysDate(+3)
function getOrderDaysDate(days,date){
  var date = date || new Date(),
      timestamp, newDate;
  if(!(date instanceof Date)){
      date = new Date(date.replace(/-/g, '/'));
  }
  timestamp = date.getTime();
  newDate = new Date(timestamp + (days * 24 * 3600 * 1000));
  return [newDate.getFullYear(), newDate.getMonth() + 1, newDate.getDate()].join('-');
}




// 获取星期  参数格式:'2024-02-17'
function getWeek(show_time) {
  let str=''
  if(show_time){
    let dateArr = show_time.split(' ')
    let dateLeftArr = dateArr[0].split('-')								
    let year = dateLeftArr[0];
    let month = dateLeftArr[1];
    let day = dateLeftArr[2];								
    var date = new Date(year, month - 1, day); // JavaScript中月份从0开始计数,需要将month-1
    str=['周日', '周一', '周二', '周三', '周四', '周五', '周六'][date.getDay()];
    return str
  }else{
    return str
  }
}

	// 获取今天日期 返回格式 2024-02-17
  function getCurrentData(){
    let curDate = new Date();
    let curYear=curDate.getFullYear()
    let curMonth=curDate.getMonth()+1<10?`0${curDate.getMonth()+1}`:curDate.getMonth()+1
    let curDay=curDate.getDate()<10?`0${curDate.getDate()}`:curDate.getDate()
    let curDateStr=curYear+'-'+curMonth+'-'+curDay
    return curDateStr				
  }
	// 获取显示的时间文本 参数格式2024-02-18  返回:今日 周一 ...
  function getWeekStr(show_time){
    let currentDate=getCurrentData()
      if(show_time&&currentDate){
        let showText=''
        let dateLeftArr = show_time.split('-')
        let dataStr=dateLeftArr[1]+'-'+dateLeftArr[2]
        let year = dateLeftArr[0];
        let month = dateLeftArr[1];
        let day = dateLeftArr[2];	
        
        if(show_time==currentDate){
          showText='今天 '+month+'-'+day
        }else{
          var date = new Date(year, month - 1, day); // JavaScript中月份从0开始计数,需要将month-1
          showText=['周日', '周一', '周二', '周三', '周四', '周五', '周六'][date.getDay()]
          showText=showText+ ' '+ dataStr
        }
        return showText
      }else{
        return ''
      }
  }


// 获取月日 参数格式:'2024-02-17'
function getMonthAndDate(show_time) {
    let str=''
    if(show_time){
      let dateArr = show_time.split(' ')
      let dateLeftArr = dateArr[0].split('-')
       str = dateLeftArr[1] + '月' + dateLeftArr[2] + '日'
    }
    return str
}

	// 获取年月日 参数格式 ‘2024-2-17 11:30:00’或‘2024-2-17’
 function getYearAndMonthAndDate(paramTime) {
      let pushTimeStr = ''
      if (paramTime) {
        let pushDataArr = paramTime.split(' ')[0]
        pushDataArr = pushDataArr.split('-')
        pushTimeStr = pushDataArr[0] + '年' + pushDataArr[1] + '月' + pushDataArr[2] + '日'
      }
      return pushTimeStr
  }

// 获取时间时分 参数格式 ‘2024-2-17 11:30:00’
function getHoursAndMinutes() {
    if (show_time) {
      let dateArr = show_time.split(' ')
      let timeArr = dateArr[1].split(':')
      let str = timeArr[0] + ':' + timeArr[1]
      return str
    }
}

	// 获取排序日期 参数格式:['2021-6-5','2021-8-30','2021-07-02','2020-04-05']
function  getSortDateArr(dataList){
    let newArr=dataList.sort((a,b)=>{
      let yearA = new Date(a).getFullYear();
      let yearB = new Date(b).getFullYear();
      if (yearA !== yearB) {
        return yearA - yearB;
      }
      let monthA = new Date(a).getMonth();
      let monthB = new Date(b).getMonth();
      if (monthA !== monthB) {
        return monthA - monthB;
      } 
      let dateA = new Date(a).getDate();
      let dateB = new Date(b).getDate();
      if (dateA !== dateB) {
        return dateA - dateB;
      }
    })
    return newArr
  }
  // let dateArr=['2021-6-5','2021-8-30','2021-07-02','2020-04-05']
  // getSortDateArr(dateArr)


// 根据时间戳获取时间 年月日
function getTimeFormat(time){
    //time 1398250549490
  //时间数字转2014-04-23 18:55:49 格式
  // php 后端时间戳返回10位数,补3个 000
  if (time == "0" || time == "0000" || !time) {
    return "----";
  }
  time = time + "";
  var date = "";
  if (time.length >= 13) {
    date = new Date(parseInt(time));
  } else {
    date = new Date(parseInt(time + "000"));
  }
  var Y = date.getFullYear() + "-";
  var M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-";
  var D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
  var h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":";
  var m = (date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) + ":";
  var s = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
  return Y + M + D + h + m + s;
}

function getTimeFormat2(time){
    //time 1398250549490
  //时间数字转2014-04-23 18:55:49 格式
  // php 后端时间戳返回10位数,补3个 000
  if (time == "0" || time == "0000") {
    return "";
  }
  time = time + "";
  var date = "";
  if (time.length >= 13) {
    date = new Date(parseInt(time));
  } else {
    date = new Date(parseInt(time + "000"));
  }
  var Y = date.getFullYear() + "-";
  var M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-";
  var D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
  return Y + M + D;
}

//转为大写数字 参数格式 整数 位数为123456789  超过九位数返回undefined
function toChinesNum(num){
  let changeNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; //changeNum[0] = "零"
  let unit = ["", "十", "百", "千", "万"];
  num = parseInt(num);
  let getWan = (temp) => {
    let strArr = temp.toString().split("").reverse();
    let newNum = "";
    for (var i = 0; i < strArr.length; i++) {
      newNum = (i == 0 && strArr[i] == 0 ? "" : i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i])) + newNum;
    }
    return newNum;
  };
  let overWan = Math.floor(num / 10000);
  let noWan = num % 10000;
  if (noWan.toString().length < 4) noWan = "0" + noWan;
  let str=overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num);
  return str
}

// toChinesNum(182978985)


// 对象数组根据某个属性进行排序
arr = [{name: "韦", age: 24}, {name: "何", age: 25},{name: "黄", age: 25},{name: "han", age: 25}];
function compare(prop) {
  return function (obj1, obj2) {
      var val1 = obj1[prop];
      var val2 = obj2[prop];if (val1 < val2) {
          return -1;
      } else if (val1 > val2) {
          return 1;
      } else {
          return 0;
      }            
  } 
}
// 使用
let sortArr=arr.sort(compare('name'))
console.log(JSON.stringify(sortArr),6666);


//补0前缀
 function addZeroPrefix(number) {
    return number < 10 ? `0${number}`:number
  },


// 隐私手机号 返回187****6666格式
function changeTelProfetionNal(tel){
  tel=tel+""
  let newTel=tel.replace(/^(\d{3})\d{4}(\d{4})$/,`$1****$2`)
  console.log(newTel);
  return newTel
}
changeTelProfetionNal(18766666666)

uniapp路由跳转携带中文参数 获取时会得到乱码:

uni.navigateTo({
  url: '/pages/target?param=' + encodeURIComponent('中文参数')
})
//encodeURIComponent解码出来还是乱码时 试试删除encodeURIComponent 直接拼接中文

//解码方式:onLoad生命周期中接收参数 使用decodeURIComponent进行解码
onLoad: function (options) {
  let param = decodeURIComponent(options.param)
  console.log(param)  // 输出:中文参数
}
//判断两个字符串数组中的元素是否相同
//方法一 先判断长度,再遍历比较
arrayCompare(array1, array2) {
    // 如果长度不一样,则直接不相等
    if(array1.length != array2.length){
        return false;
    }
    // 如果长度一样,则for循环比较
    for(let i = 0; i < array1.length; i++){
        // array1的元素是否都在array2中存在,有一个不存在就不相等
        if(!array2.includes(array1[i])){
            return false;
        }
    }
    for(let i = 0; i < array2.length; i++){
        // array2的元素是否都在array1中存在,有一个不存在就不相等
        if(!array1.includes(array2[i])){
            return false;
        }
    }
    // 如果执行到这里,说明全部匹配
    return true;
}


//方法二
arrayCompare1(arr1,  arr2) {
    let result = arr1.length === arr2.length && arr1.every(a => arr2.some(b => a === b)) && arr2.every(_b => arr1.some(_a => _a === _b));
    return result;
}

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值