项目中常用的一些公共方法(前端),如时间/数字格式化、判空、去前后空格等等

1. 关于时间

11.获取某年中,某月最后一天是几号。如:getMonthEnd(2019, 1),输出31

function getMonthEnd(year, month) {
  month = parseInt(month);
  if (month == 12) {
    var expect = 1;
    year++;
    return new Date(new Date(year + '/' + expect + '/1').getTime() - 24 * 60 * 60 * 100).getDate()
  } else {
    return new Date(new Date(year + '/' + (month + 1) + '/1').getTime() - 24 * 60 * 60 * 100).getDate()
  }
}

12.获取某月的总天数。如:getMonthDaysCount(2019, 2),输出28

function getMonthDaysCount(year, month) {
  return new Date(year, month, 0).getDate()
}

13. 格式化时间。如:dateFormat(new Date(),'yyyy-MM-dd hh:mm:ss'),输出2019-06-10 15:47:37

//时间格式化
function formatDate(date, fmt) { 
  if (date == null || date == '' || date == undefined)
    return null;
  try {
    if(typeof(date) == "string" &&  date.indexOf('-') != -1){
      date = date.replace(/-/g,'/');
    }
    date = new Date(date);
  } catch (e) {
    date = date;
  }
  fmt = fmt ? fmt : 'yyyy-MM-dd';
  var o = {
    "M+": date.getMonth() + 1, //月份 
    "d+": date.getDate(), //日 
    "H+": date.getHours(), //小时 
    "m+": date.getMinutes(), //分
    "s+": date.getSeconds(), //秒 
    "q+": Math.floor((date.getMonth() + 3) / 3), //季度 
    "S": date.getMilliseconds() //毫秒 
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}

14. 比较两个日期的大小

function compareDate(date1,date2){
    var oDate1 = new Date(date1);
    var oDate2 = new Date(date2);
	
    if(oDate1.getTime() > oDate2.getTime()){
        return 1;
    } else {
        return 0;
    }
}

2. 电话号码验证。支持手机号码、含区号固定电话、不含区号固定电话

function checkTel(tel) {
  var pattern = /(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
  if (pattern.test(tel)) {
    return true;
  }else {
    return false;
  }
}

3. 去掉字符串前后空格

function toTrim(x) {
  return x.replace(/^\s+|\s+$/gm,'');
}

4. 判断是否为空对象、空数组等等。

function isEmpty(obj) {
    //检验null和undefined和''
    if (!obj && obj !== 0) {
        return true;
    }
    //检验数组
    if (Array.prototype.isPrototypeOf(obj) && obj.length === 0) {
        return true;
    }
    //检验对象
    if (Object.prototype.isPrototypeOf(obj) && Object.keys(obj).length === 0) {
        return true;
    }
    return false;
}

5. 两个数的加减乘除,解决小数运算出现多位小数。

//浮点数相加,解决小数运算出现多位小数
function addNum(num1, num2){
    var sq1,sq2,m;
    try {
        sq1 = num1.toString().split(".")[1].length;
    } catch (e) {
	sq1 = 0;
    }
    try {
	sq2 = num2.toString().split(".")[1].length;
    } catch (e) {
	sq2 = 0;
    }
    m = Math.pow(10,Math.max(sq1, sq2));
    return (num1 * m + num2 * m) / m;	
}
//浮点数相减,解决小数运算出现多位小数
function subNum(num1, num2){
    var r1,r2,m,n;
    try{
        r1 = num1.toString().split('.')[1].length;
    }catch(e){
        r1 = 0;
    }
    try{
        r2 = num2.toString().split('.')[1].length;
    }catch(e){
        r2 = 0;
    }
    m = Math.pow(10,Math.max(r1,r2));
    n = (r1 >= r2) ? r1 : r2;
    return (Math.round(num1 * m - num2*m) / m).toFixed(n);	
}
//浮点数相乘,解决小数运算出现多位小数
function mulNum(num1,num2){
    var m = 0,r1,r2;
    var s1 = num1.toString();
    var s2 = num2.toString();
    try{
        m += s1.split('.')[1].length
    }catch(e){

    }
    try{
        m += s2.split('.')[1].length
    }catch(e){

    }
    r1 = Number(num1.toString().replace(".",""));
    r2 = Number(num2.toString().replace(".",""));
    return r1 * r2 / Math.pow(10,m);	
}
//浮点数相除,解决小数运算出现多位小数
function divNum(num1,num2){
    var c, d, e = 0,f = 0;
    try {
        e = num1.toString().split(".")[1].length;
    } catch (g) {
		
    }
    try {
        f = num2.toString().split(".")[1].length;
    } catch (g) {
		
    }
    return c = Number(num1.toString().replace(".", "")), d = Number(num2.toString().replace(".", "")), this.mulNum(c / d, Math.pow(10, f - e));
}

6.数字格式化

61. 千分号加逗号,即个位数开始每隔三位数,就用逗号隔开,如:numFormat(10000000.01),输出10,000,000.01

function numFormat(num) {
  if (num == null) {
    return;
  }
  if (!isNaN(num)) {
    num = num.toString();
  }
  if (num.indexOf('.') != -1) {
    var decimals = num.split('.')[1];
    return (
      (parseInt(Number(num)) + '').replace(
        /\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,
        '$&,'
      ) +
      '.' +
      decimals.substring(0, 2)
    );
  } else {
    return (parseInt(Number(num)).toFixed(0) + '').replace(
      /\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,
      '$&,'
    );
  }
}

62. 千分号去掉逗号。如:delNumFormat('10,111,111,111.01'),输出10111111111.01

function delNumFormat(snum){
    return snum.replace(/,/g,'');
}

7. 关于地图的。

71. 计算两个经纬度之间的距离

function distance(la1, lo1, la2, lo2) {
  var La1 = la1 * Math.PI / 180.0;
  var La2 = la2 * Math.PI / 180.0;
  var La3 = La1 - La2;
  var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
  var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
  s = s * 6378.137;
  s = Math.round(s * 10000) / 10000;
  s = s*1000; //转为米单位
  s = s.toFixed(2);
  return s;
}

72.各种地图坐标系的转换

//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
/**
  * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
  * 即 百度 转 谷歌、高德
  * @param bd_lon
  * @param bd_lat
  * @returns {*[]}
  */
function bd09togcj02(bd_lon, bd_lat) {
  var bd_lon = +bd_lon;
  var bd_lat = +bd_lat;
  var x = bd_lon - 0.0065;
  var y = bd_lat - 0.006;
  var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
  var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
  var gg_lng = z * Math.cos(theta);
  var gg_lat = z * Math.sin(theta);
  return [gg_lng, gg_lat]
}
/**
   * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
   * 即谷歌、高德 转 百度
   * @param lng
   * @param lat
   * @returns {*[]}
   */
function gcj02tobd09(lng, lat) {
  var lat = +lat;
  var lng = +lng;
  var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
  var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
  var bd_lng = z * Math.cos(theta) + 0.0065;
  var bd_lat = z * Math.sin(theta) + 0.006;
  return [bd_lng, bd_lat]
};
/**
   * WGS84转GCj02
   * @param lng
   * @param lat
   * @returns {*[]}
   */
 function wgs84togcj02(lng, lat) {
    var lat = +lat;
    var lng = +lng;
    if (out_of_china(lng, lat)) {
      return [lng, lat]
    } else {
      var dlat = transformlat(lng - 105.0, lat - 35.0);
      var dlng = transformlng(lng - 105.0, lat - 35.0);
      var radlat = lat / 180.0 * PI;
      var magic = Math.sin(radlat);
      magic = 1 - ee * magic * magic;
      var sqrtmagic = Math.sqrt(magic);
      dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
      dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
      var mglat = lat + dlat;
      var mglng = lng + dlng;
      return [mglng, mglat]
    }
  };

  /**
   * GCJ02 转换为 WGS84
   * @param lng
   * @param lat
   * @returns {*[]}
   */
  function gcj02towgs84(lng, lat) {
    var lat = +lat;
    var lng = +lng;
    if (out_of_china(lng, lat)) {
      return [lng, lat]
    } else {
      var dlat = transformlat(lng - 105.0, lat - 35.0);
      var dlng = transformlng(lng - 105.0, lat - 35.0);
      var radlat = lat / 180.0 * PI;
      var magic = Math.sin(radlat);
      magic = 1 - ee * magic * magic;
      var sqrtmagic = Math.sqrt(magic);
      dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
      dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
      var mglat = lat + dlat;
      var mglng = lng + dlng;
      return [lng * 2 - mglng, lat * 2 - mglat]
    }
  };

  function transformlat(lng, lat) {
    var lat = +lat;
    var lng = +lng;
    var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
    return ret
  };

  function transformlng(lng, lat) {
    var lat = +lat;
    var lng = +lng;
    var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
    return ret
  };

  /**
   * 判断是否在国内,不在国内则不做偏移
   * @param lng
   * @param lat
   * @returns {boolean}
   */
  function out_of_china(lng, lat) {
    var lat = +lat;
    var lng = +lng;
    // 纬度3.86~53.55,经度73.66~135.05 
    return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
  };

8.页面跳转传参 -- 获取参数值。

function getUrlParam(name){
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = decodeURIComponent(window.location.search).substr(1).match(reg);
    if (r!=null) return unescape(r[2]); return null;
}

9.前端获取uuid

getUuid() {
   var d = new Date().getTime();
   if (window.performance && typeof window.performance.now === "function") {
        d += performance.now(); //use high-precision timer if available
   }
   var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
       var r = (d + Math.random() * 16) % 16 | 0;
       d = Math.floor(d / 16);
       return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
   });
  return uuid;
}

暂时就这么多,后续再添加。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值