util.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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. console.log('Obj==',_result.join('&'))
  163. return _result.join('&');
  164. }
  165. // 隐藏手机号中间四位
  166. function styleHintText(tel) {
  167. if (tel) {
  168. var reg = /^(\d{6})\d{8}(\d{4})$/;
  169. tel = tel.replace(reg, "$1********$2");
  170. }
  171. return tel;
  172. }
  173. function getDateDiff(dateTimeStamp){
  174. var minute = 1000 * 60;
  175. var hour = minute * 60;
  176. var day = hour * 24;
  177. var halfamonth = day * 15;
  178. var month = day * 30;
  179. var now = new Date().getTime();
  180. var diffValue = now - dateTimeStamp;
  181. if(diffValue < 0){return;}
  182. var monthC =diffValue/month;
  183. var weekC =diffValue/(7*day);
  184. var dayC =diffValue/day;
  185. var hourC =diffValue/hour;
  186. var minC =diffValue/minute;
  187. if(monthC>=1){
  188. result="" + parseInt(monthC) + "月前";
  189. }
  190. else if(weekC>=1){
  191. result="" + parseInt(weekC) + "周前";
  192. }
  193. else if(dayC>=1){
  194. result=""+ parseInt(dayC) +"天前";
  195. }
  196. else if(hourC>=1){
  197. result=""+ parseInt(hourC) +"小时前";
  198. }
  199. else if(minC>=1){
  200. result=""+ parseInt(minC) +"分钟前";
  201. }else
  202. result="刚刚";
  203. return result;
  204. }
  205. function formatNumbers(num) {
  206. if (num >= 1e4) {
  207. return parseInt(num / 1e4).toFixed(0) + 'w+'
  208. } else if (num >= 999) {
  209. return '999+'
  210. } else if (num >= 99) {
  211. return '99+'
  212. } else {
  213. return num
  214. }
  215. }
  216. // 金钱
  217. function toDecimal(x) {
  218. var f = Math.round(x * 100) / 100;
  219. var s = f.toString();
  220. var rs = s.indexOf('.');
  221. if (rs < 0) {
  222. rs = s.length;
  223. s += '.';
  224. }
  225. while (s.length <= rs + 2) {
  226. s += '0';
  227. }
  228. return s;
  229. }
  230. // 时间字符串返回时分
  231. function captureTime(time,isTime){
  232. var fullTime = time; // 日期字符串
  233. // console.log(fullTime + '----');
  234. var timeArr = fullTime.replace(" ", ":").replace(/\:/g, "-").split("-");
  235. var nian = timeArr[0];
  236. var yue = timeArr[1];
  237. var ri = timeArr[2];
  238. var shi = timeArr[3];
  239. var fen = timeArr[4];
  240. var miao = timeArr[5];
  241. // console.log(nian + '-' + yue + '-' + ri + ' ' + shi + ':' + fen + ':' + miao);
  242. var str = shi + ':' + fen;
  243. var date =nian + '-' + yue + '-' + ri;
  244. // var str = yue + '-' + ri + ' ' + shi + ':' + fen;
  245. // console.log(str);
  246. if(isTime){
  247. return str
  248. }else{
  249. return date
  250. }
  251. }
  252. function countDown(times){
  253. //计算小时数 转化为整数
  254. var h = parseInt(times / 60);
  255. //如果小时数小于 10,要变成 0 + 数字的形式
  256. h = h < 10 ? "0" + h : h;
  257. //计算分钟数 转化为整数
  258. var m = parseInt(times % 60);
  259. //如果分钟数小于 10,要变成 0 + 数字的形式
  260. m = m < 10 ? "0" + m : m;
  261. //计算描述 转化为整数
  262. // var s = parseInt(times % 60);
  263. //如果秒钟数小于 10,要变成 0 + 数字的形式
  264. // s = s < 10 ? "0" + s : s;
  265. // return h + ':' + m + ':' + s
  266. return [h,m];
  267. }
  268. module.exports = {
  269. formatTime: formatTime,
  270. formatTimes: formatTimes,
  271. formatDayTimes: formatDayTimes,
  272. equalsObj: equalsObj,
  273. isObject: isObject,
  274. isArray: isArray,
  275. transTime: transTime,
  276. throttle: throttle,
  277. getPreMonth: getPreMonth,
  278. isMobile:isMobile,
  279. convertUrlObj:convertUrlObj,
  280. getDateDiff: getDateDiff,
  281. styleHintText:styleHintText,
  282. formatNumbers: formatNumbers,
  283. toDecimal: toDecimal,
  284. captureTime: captureTime,
  285. countDown:countDown
  286. };