util.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. const formatTime = date => {
  2. const year = date.getFullYear();
  3. const month = date.getMonth() + 1;
  4. const day = date.getDate();
  5. const hour = date.getHours();
  6. const minute = date.getMinutes();
  7. const second = date.getSeconds();
  8. var t1 = [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(
  9. ':');
  10. var t2 = [year, month, day].map(formatNumber).join('-');
  11. var time = {
  12. t1: t1,
  13. t2: t2
  14. };
  15. return time;
  16. };
  17. /**
  18. * 获取上一个月
  19. *
  20. * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
  21. */
  22. const getPreMonth = date => {
  23. var arr = date.split('-');
  24. var year = arr[0]; //获取当前日期的年份
  25. var month = arr[1]; //获取当前日期的月份
  26. var day = arr[2]; //获取当前日期的日
  27. var days = new Date(year, month, 0);
  28. days = days.getDate(); //获取当前日期中月的天数
  29. var year2 = year;
  30. var month2 = parseInt(month) - 1;
  31. if (month2 == 0) {
  32. //如果是1月份,则取上一年的12月份
  33. year2 = parseInt(year2) - 1;
  34. month2 = 12;
  35. }
  36. var day2 = day;
  37. var days2 = new Date(year2, month2, 0);
  38. days2 = days2.getDate();
  39. if (day2 > days2) {
  40. //如果原来日期大于上一月的日期,则取当月的最大日期。比如3月的30日,在2月中没有30
  41. day2 = days2;
  42. }
  43. if (month2 < 10) {
  44. month2 = '0' + month2; //月份填补成2位。
  45. }
  46. var t1 = year + '-' + month;
  47. var t2 = year2 + '-' + month2;
  48. var time = {
  49. t1: t1,
  50. t2: t2
  51. };
  52. return time;
  53. };
  54. const formatNumber = n => {
  55. n = n.toString();
  56. return n[1] ? n : '0' + n;
  57. };
  58. const formatTimes = t => {
  59. let second = t % 60;
  60. let minute = parseInt(t / 60 % 60);
  61. let hour = parseInt(t / 60 / 60);
  62. return formatNumber(hour) + ':' + formatNumber(minute) + ":" + formatNumber(second);
  63. };
  64. const formatDayTimes = t => {
  65. let second = t % 60;
  66. let minute = parseInt(t / 60 % 60);
  67. let hour = parseInt(t / 60 / 60 % 24);
  68. let day = parseInt(t / 60 / 60 / 24);
  69. return formatNumber(day) + '天' + formatNumber(hour) + ':' + formatNumber(minute) + ":" + formatNumber(second);
  70. };
  71. /**
  72. * 判断此对象是否是Object类型
  73. * @param {Object} obj
  74. */
  75. function isObject(obj) {
  76. return Object.prototype.toString.call(obj) === '[object Object]';
  77. }
  78. ;
  79. /**
  80. * 判断此类型是否是Array类型
  81. * @param {Array} arr
  82. */
  83. function isArray(arr) {
  84. return Object.prototype.toString.call(arr) === '[object Array]';
  85. }
  86. ;
  87. /**
  88. * 深度比较两个对象是否相同
  89. * @param {Object} oldData
  90. * @param {Object} newData
  91. */
  92. function equalsObj(oldData, newData) {
  93. // 类型为基本类型时,如果相同,则返回true
  94. if (oldData === newData) return true;
  95. if (isObject(oldData) && isObject(newData) && Object.keys(oldData).length === Object.keys(newData).length) {
  96. // 类型为对象并且元素个数相同
  97. // 遍历所有对象中所有属性,判断元素是否相同
  98. for (const key in oldData) {
  99. if (oldData.hasOwnProperty(key)) {
  100. if (!equalsObj(oldData[key], newData[key])) // 对象中具有不相同属性 返回false
  101. return false;
  102. }
  103. }
  104. } else if (isArray(oldData) && isArray(oldData) && oldData.length === newData.length) {
  105. // 类型为数组并且数组长度相同
  106. for (let i = 0, length = oldData.length; i < length; i++) {
  107. if (!equalsObj(oldData[i], newData[i])) // 如果数组元素中具有不相同元素,返回false
  108. return false;
  109. }
  110. } else {
  111. // 其它类型,均返回false
  112. return false;
  113. } // 走到这里,说明数组或者对象中所有元素都相同,返回true
  114. return true;
  115. }
  116. ; //时间戳转化
  117. function transTime(date) {
  118. var date = new Date(parseInt(date) * 1000);
  119. var year = date.getFullYear();
  120. var month = date.getMonth() + 1;
  121. var day = date.getDate();
  122. var hour = date.getHours();
  123. var minute = date.getMinutes();
  124. var second = date.getSeconds();
  125. return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':');
  126. }
  127. ; // 节流
  128. function throttle(fn, gapTime) {
  129. if (gapTime == null || gapTime == undefined) {
  130. gapTime = 1500;
  131. }
  132. let _lastTime = null; // 返回新的函数
  133. return function() {
  134. let _nowTime = +new Date();
  135. if (_nowTime - _lastTime > gapTime || !_lastTime) {
  136. fn.apply(this, arguments); //将this和参数传给原函数
  137. _lastTime = _nowTime;
  138. }
  139. };
  140. };
  141. const isMobile = (value) => {
  142. var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/; //验证规则
  143. var flag = reg.test(value);
  144. if (!flag) {
  145. return false
  146. } else {
  147. return true
  148. }
  149. }
  150. const convertUrlObj = (data) => {
  151. var _result = [];
  152. for (var key in data) {
  153. var value = data[key];
  154. if (value.constructor == Array) {
  155. value.forEach(function(_value) {
  156. _result.push(key + "=" + _value);
  157. });
  158. } else {
  159. _result.push(key + '=' + value);
  160. }
  161. }
  162. return _result.join('&');
  163. }
  164. // 隐藏身份证中间位数
  165. function styleHintText(tel) {
  166. if (tel) {
  167. var reg = /^(\d{6})\d{8}(\d{4})$/;
  168. tel = tel.replace(reg, "$1********$2");
  169. }
  170. return tel;
  171. }
  172. // 隐藏手机号中间四位
  173. function phoneHintText(tel) {
  174. if (tel) {
  175. var reg = /^(\d{3})\d{4}(\d{4})$/;
  176. tel = tel.replace(reg, "$1****$2");
  177. }
  178. return tel;
  179. }
  180. function getDateDiff(dateTimeStamp) {
  181. var minute = 1000 * 60;
  182. var hour = minute * 60;
  183. var day = hour * 24;
  184. var halfamonth = day * 15;
  185. var month = day * 30;
  186. var now = new Date().getTime();
  187. var diffValue = now - dateTimeStamp;
  188. if (diffValue < 0) {
  189. return;
  190. }
  191. var monthC = diffValue / month;
  192. var weekC = diffValue / (7 * day);
  193. var dayC = diffValue / day;
  194. var hourC = diffValue / hour;
  195. var minC = diffValue / minute;
  196. if (monthC >= 1) {
  197. result = "" + parseInt(monthC) + "月前";
  198. } else if (weekC >= 1) {
  199. result = "" + parseInt(weekC) + "周前";
  200. } else if (dayC >= 1) {
  201. result = "" + parseInt(dayC) + "天前";
  202. } else if (hourC >= 1) {
  203. result = "" + parseInt(hourC) + "小时前";
  204. } else if (minC >= 1) {
  205. result = "" + parseInt(minC) + "分钟前";
  206. } else
  207. result = "刚刚";
  208. return result;
  209. }
  210. function removeHtml(content) {
  211. var temp = content.replace(/<\/?.+?>/g, "");
  212. var result = temp.replace(/ /g, "");
  213. var test = result.replace(/<br>/ig, "");
  214. var text = test.replace(/&nbsp;/ig, "");
  215. return text;
  216. }
  217. /**
  218. * 安卓环境
  219. */
  220. function isAndroidSys() {
  221. return uni.getSystemInfoSync().platform == 'android';
  222. }
  223. /**
  224. * ios环境
  225. */
  226. function isIosSys() {
  227. return uni.getSystemInfoSync().platform == 'ios';
  228. }
  229. module.exports = {
  230. formatTime: formatTime,
  231. formatTimes: formatTimes,
  232. formatDayTimes: formatDayTimes,
  233. equalsObj: equalsObj,
  234. isObject: isObject,
  235. isArray: isArray,
  236. transTime: transTime,
  237. throttle: throttle,
  238. getPreMonth: getPreMonth,
  239. isMobile: isMobile,
  240. convertUrlObj: convertUrlObj,
  241. getDateDiff: getDateDiff,
  242. styleHintText: styleHintText,
  243. removeHtml: removeHtml,
  244. isAndroidSys: isAndroidSys,
  245. isIosSys: isIosSys,
  246. phoneHintText: phoneHintText,
  247. };