当前位置:   article > 正文

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

前端常用公共方法

1. 关于时间

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

  1. function getMonthEnd(year, month) {
  2. month = parseInt(month);
  3. if (month == 12) {
  4. var expect = 1;
  5. year++;
  6. return new Date(new Date(year + '/' + expect + '/1').getTime() - 24 * 60 * 60 * 100).getDate()
  7. } else {
  8. return new Date(new Date(year + '/' + (month + 1) + '/1').getTime() - 24 * 60 * 60 * 100).getDate()
  9. }
  10. }

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

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

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

  1. //时间格式化
  2. function formatDate(date, fmt) {
  3. if (date == null || date == '' || date == undefined)
  4. return null;
  5. try {
  6. if(typeof(date) == "string" && date.indexOf('-') != -1){
  7. date = date.replace(/-/g,'/');
  8. }
  9. date = new Date(date);
  10. } catch (e) {
  11. date = date;
  12. }
  13. fmt = fmt ? fmt : 'yyyy-MM-dd';
  14. var o = {
  15. "M+": date.getMonth() + 1, //月份
  16. "d+": date.getDate(), //日
  17. "H+": date.getHours(), //小时
  18. "m+": date.getMinutes(), //分
  19. "s+": date.getSeconds(), //秒
  20. "q+": Math.floor((date.getMonth() + 3) / 3), //季度
  21. "S": date.getMilliseconds() //毫秒
  22. };
  23. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  24. for (var k in o)
  25. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  26. return fmt;
  27. }

14. 比较两个日期的大小

  1. function compareDate(date1,date2){
  2. var oDate1 = new Date(date1);
  3. var oDate2 = new Date(date2);
  4. if(oDate1.getTime() > oDate2.getTime()){
  5. return 1;
  6. } else {
  7. return 0;
  8. }
  9. }

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

  1. function checkTel(tel) {
  2. 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}$)/;
  3. if (pattern.test(tel)) {
  4. return true;
  5. }else {
  6. return false;
  7. }
  8. }

3. 去掉字符串前后空格

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

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

  1. function isEmpty(obj) {
  2. //检验null和undefined和''
  3. if (!obj && obj !== 0) {
  4. return true;
  5. }
  6. //检验数组
  7. if (Array.prototype.isPrototypeOf(obj) && obj.length === 0) {
  8. return true;
  9. }
  10. //检验对象
  11. if (Object.prototype.isPrototypeOf(obj) && Object.keys(obj).length === 0) {
  12. return true;
  13. }
  14. return false;
  15. }

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

  1. //浮点数相加,解决小数运算出现多位小数
  2. function addNum(num1, num2){
  3. var sq1,sq2,m;
  4. try {
  5. sq1 = num1.toString().split(".")[1].length;
  6. } catch (e) {
  7. sq1 = 0;
  8. }
  9. try {
  10. sq2 = num2.toString().split(".")[1].length;
  11. } catch (e) {
  12. sq2 = 0;
  13. }
  14. m = Math.pow(10,Math.max(sq1, sq2));
  15. return (num1 * m + num2 * m) / m;
  16. }
  17. //浮点数相减,解决小数运算出现多位小数
  18. function subNum(num1, num2){
  19. var r1,r2,m,n;
  20. try{
  21. r1 = num1.toString().split('.')[1].length;
  22. }catch(e){
  23. r1 = 0;
  24. }
  25. try{
  26. r2 = num2.toString().split('.')[1].length;
  27. }catch(e){
  28. r2 = 0;
  29. }
  30. m = Math.pow(10,Math.max(r1,r2));
  31. n = (r1 >= r2) ? r1 : r2;
  32. return (Math.round(num1 * m - num2*m) / m).toFixed(n);
  33. }
  34. //浮点数相乘,解决小数运算出现多位小数
  35. function mulNum(num1,num2){
  36. var m = 0,r1,r2;
  37. var s1 = num1.toString();
  38. var s2 = num2.toString();
  39. try{
  40. m += s1.split('.')[1].length
  41. }catch(e){
  42. }
  43. try{
  44. m += s2.split('.')[1].length
  45. }catch(e){
  46. }
  47. r1 = Number(num1.toString().replace(".",""));
  48. r2 = Number(num2.toString().replace(".",""));
  49. return r1 * r2 / Math.pow(10,m);
  50. }
  51. //浮点数相除,解决小数运算出现多位小数
  52. function divNum(num1,num2){
  53. var c, d, e = 0,f = 0;
  54. try {
  55. e = num1.toString().split(".")[1].length;
  56. } catch (g) {
  57. }
  58. try {
  59. f = num2.toString().split(".")[1].length;
  60. } catch (g) {
  61. }
  62. return c = Number(num1.toString().replace(".", "")), d = Number(num2.toString().replace(".", "")), this.mulNum(c / d, Math.pow(10, f - e));
  63. }

6.数字格式化

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

  1. function numFormat(num) {
  2. if (num == null) {
  3. return;
  4. }
  5. if (!isNaN(num)) {
  6. num = num.toString();
  7. }
  8. if (num.indexOf('.') != -1) {
  9. var decimals = num.split('.')[1];
  10. return (
  11. (parseInt(Number(num)) + '').replace(
  12. /\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,
  13. '$&,'
  14. ) +
  15. '.' +
  16. decimals.substring(0, 2)
  17. );
  18. } else {
  19. return (parseInt(Number(num)).toFixed(0) + '').replace(
  20. /\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,
  21. '$&,'
  22. );
  23. }
  24. }

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

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

7. 关于地图的。

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

  1. function distance(la1, lo1, la2, lo2) {
  2. var La1 = la1 * Math.PI / 180.0;
  3. var La2 = la2 * Math.PI / 180.0;
  4. var La3 = La1 - La2;
  5. var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
  6. 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)));
  7. s = s * 6378.137;
  8. s = Math.round(s * 10000) / 10000;
  9. s = s*1000; //转为米单位
  10. s = s.toFixed(2);
  11. return s;
  12. }

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

  1. //定义一些常量
  2. var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
  3. var PI = 3.1415926535897932384626;
  4. var a = 6378245.0;
  5. var ee = 0.00669342162296594323;
  6. /**
  7. * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
  8. * 即 百度 转 谷歌、高德
  9. * @param bd_lon
  10. * @param bd_lat
  11. * @returns {*[]}
  12. */
  13. function bd09togcj02(bd_lon, bd_lat) {
  14. var bd_lon = +bd_lon;
  15. var bd_lat = +bd_lat;
  16. var x = bd_lon - 0.0065;
  17. var y = bd_lat - 0.006;
  18. var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
  19. var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
  20. var gg_lng = z * Math.cos(theta);
  21. var gg_lat = z * Math.sin(theta);
  22. return [gg_lng, gg_lat]
  23. }
  24. /**
  25. * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
  26. * 即谷歌、高德 转 百度
  27. * @param lng
  28. * @param lat
  29. * @returns {*[]}
  30. */
  31. function gcj02tobd09(lng, lat) {
  32. var lat = +lat;
  33. var lng = +lng;
  34. var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
  35. var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
  36. var bd_lng = z * Math.cos(theta) + 0.0065;
  37. var bd_lat = z * Math.sin(theta) + 0.006;
  38. return [bd_lng, bd_lat]
  39. };
  40. /**
  41. * WGS84转GCj02
  42. * @param lng
  43. * @param lat
  44. * @returns {*[]}
  45. */
  46. function wgs84togcj02(lng, lat) {
  47. var lat = +lat;
  48. var lng = +lng;
  49. if (out_of_china(lng, lat)) {
  50. return [lng, lat]
  51. } else {
  52. var dlat = transformlat(lng - 105.0, lat - 35.0);
  53. var dlng = transformlng(lng - 105.0, lat - 35.0);
  54. var radlat = lat / 180.0 * PI;
  55. var magic = Math.sin(radlat);
  56. magic = 1 - ee * magic * magic;
  57. var sqrtmagic = Math.sqrt(magic);
  58. dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  59. dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  60. var mglat = lat + dlat;
  61. var mglng = lng + dlng;
  62. return [mglng, mglat]
  63. }
  64. };
  65. /**
  66. * GCJ02 转换为 WGS84
  67. * @param lng
  68. * @param lat
  69. * @returns {*[]}
  70. */
  71. function gcj02towgs84(lng, lat) {
  72. var lat = +lat;
  73. var lng = +lng;
  74. if (out_of_china(lng, lat)) {
  75. return [lng, lat]
  76. } else {
  77. var dlat = transformlat(lng - 105.0, lat - 35.0);
  78. var dlng = transformlng(lng - 105.0, lat - 35.0);
  79. var radlat = lat / 180.0 * PI;
  80. var magic = Math.sin(radlat);
  81. magic = 1 - ee * magic * magic;
  82. var sqrtmagic = Math.sqrt(magic);
  83. dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  84. dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  85. var mglat = lat + dlat;
  86. var mglng = lng + dlng;
  87. return [lng * 2 - mglng, lat * 2 - mglat]
  88. }
  89. };
  90. function transformlat(lng, lat) {
  91. var lat = +lat;
  92. var lng = +lng;
  93. 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));
  94. ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  95. ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
  96. ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
  97. return ret
  98. };
  99. function transformlng(lng, lat) {
  100. var lat = +lat;
  101. var lng = +lng;
  102. var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  103. ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  104. ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
  105. ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
  106. return ret
  107. };
  108. /**
  109. * 判断是否在国内,不在国内则不做偏移
  110. * @param lng
  111. * @param lat
  112. * @returns {boolean}
  113. */
  114. function out_of_china(lng, lat) {
  115. var lat = +lat;
  116. var lng = +lng;
  117. // 纬度3.86~53.55,经度73.66~135.05
  118. return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
  119. };

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

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

9.前端获取uuid

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/794324
推荐阅读
相关标签
  

闽ICP备14008679号