util.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. const formatTimeComm = (date, format)=> {
  2. var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
  3. var returnArr = [];
  4. returnArr.push(date.getFullYear());
  5. returnArr.push(formatNumber(date.getMonth() + 1));
  6. returnArr.push(formatNumber(date.getDate()));
  7. returnArr.push(formatNumber(date.getHours()));
  8. returnArr.push(formatNumber(date.getMinutes()));
  9. returnArr.push(formatNumber(date.getSeconds()));
  10. for (var i in returnArr) {
  11. format = format.replace(formateArr[i], returnArr[i]);
  12. }
  13. return format;
  14. }
  15. const formatTime = date => {
  16. const year = date.getFullYear();
  17. const month = date.getMonth() + 1;
  18. const day = date.getDate();
  19. const hour = date.getHours();
  20. const minute = date.getMinutes();
  21. const second = date.getSeconds();
  22. var t1 = [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(
  23. ':');
  24. var t2 = [year, month, day].map(formatNumber).join('-');
  25. var time = {
  26. t1: t1,
  27. t2: t2
  28. };
  29. return time;
  30. };
  31. /**
  32. * 获取上一个月
  33. *
  34. * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
  35. */
  36. const getPreMonth = date => {
  37. var arr = date.split('-');
  38. var year = arr[0]; //获取当前日期的年份
  39. var month = arr[1]; //获取当前日期的月份
  40. var day = arr[2]; //获取当前日期的日
  41. var days = new Date(year, month, 0);
  42. days = days.getDate(); //获取当前日期中月的天数
  43. var year2 = year;
  44. var month2 = parseInt(month) - 1;
  45. if (month2 == 0) {
  46. //如果是1月份,则取上一年的12月份
  47. year2 = parseInt(year2) - 1;
  48. month2 = 12;
  49. }
  50. var day2 = day;
  51. var days2 = new Date(year2, month2, 0);
  52. days2 = days2.getDate();
  53. if (day2 > days2) {
  54. //如果原来日期大于上一月的日期,则取当月的最大日期。比如3月的30日,在2月中没有30
  55. day2 = days2;
  56. }
  57. if (month2 < 10) {
  58. month2 = '0' + month2; //月份填补成2位。
  59. }
  60. var t1 = year + '-' + month;
  61. var t2 = year2 + '-' + month2;
  62. var time = {
  63. t1: t1,
  64. t2: t2
  65. };
  66. return time;
  67. };
  68. const formatNumber = n => {
  69. n = n.toString();
  70. return n[1] ? n : '0' + n;
  71. };
  72. const formatTimes = t => {
  73. let second = t % 60;
  74. let minute = parseInt(t / 60 % 60);
  75. let hour = parseInt(t / 60 / 60);
  76. return formatNumber(hour) + ':' + formatNumber(minute) + ":" + formatNumber(second);
  77. };
  78. const formatDayTimes = t => {
  79. let second = t % 60;
  80. let minute = parseInt(t / 60 % 60);
  81. let hour = parseInt(t / 60 / 60 % 24);
  82. let day = parseInt(t / 60 / 60 / 24);
  83. return formatNumber(day) + '天' + formatNumber(hour) + ':' + formatNumber(minute) + ":" + formatNumber(second);
  84. };
  85. /**
  86. * 判断此对象是否是Object类型
  87. * @param {Object} obj
  88. */
  89. function isObject(obj) {
  90. return Object.prototype.toString.call(obj) === '[object Object]';
  91. }
  92. ;
  93. /**
  94. * 判断此类型是否是Array类型
  95. * @param {Array} arr
  96. */
  97. function isArray(arr) {
  98. return Object.prototype.toString.call(arr) === '[object Array]';
  99. }
  100. ;
  101. /**
  102. * 深度比较两个对象是否相同
  103. * @param {Object} oldData
  104. * @param {Object} newData
  105. */
  106. function equalsObj(oldData, newData) {
  107. // 类型为基本类型时,如果相同,则返回true
  108. if (oldData === newData) return true;
  109. if (isObject(oldData) && isObject(newData) && Object.keys(oldData).length === Object.keys(newData).length) {
  110. // 类型为对象并且元素个数相同
  111. // 遍历所有对象中所有属性,判断元素是否相同
  112. for (const key in oldData) {
  113. if (oldData.hasOwnProperty(key)) {
  114. if (!equalsObj(oldData[key], newData[key])) // 对象中具有不相同属性 返回false
  115. return false;
  116. }
  117. }
  118. } else if (isArray(oldData) && isArray(oldData) && oldData.length === newData.length) {
  119. // 类型为数组并且数组长度相同
  120. for (let i = 0, length = oldData.length; i < length; i++) {
  121. if (!equalsObj(oldData[i], newData[i])) // 如果数组元素中具有不相同元素,返回false
  122. return false;
  123. }
  124. } else {
  125. // 其它类型,均返回false
  126. return false;
  127. } // 走到这里,说明数组或者对象中所有元素都相同,返回true
  128. return true;
  129. }
  130. ; //时间戳转化
  131. function transTime(date) {
  132. var date = new Date(parseInt(date) * 1000);
  133. var year = date.getFullYear();
  134. var month = date.getMonth() + 1;
  135. var day = date.getDate();
  136. var hour = date.getHours();
  137. var minute = date.getMinutes();
  138. var second = date.getSeconds();
  139. return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':');
  140. }
  141. ; // 节流
  142. function throttle(fn, gapTime) {
  143. if (gapTime == null || gapTime == undefined) {
  144. gapTime = 1500;
  145. }
  146. let _lastTime = null; // 返回新的函数
  147. return function() {
  148. let _nowTime = +new Date();
  149. if (_nowTime - _lastTime > gapTime || !_lastTime) {
  150. fn.apply(this, arguments); //将this和参数传给原函数
  151. _lastTime = _nowTime;
  152. }
  153. };
  154. };
  155. const isMobile = (mobile) => {
  156. var regmobile = /^(13|15|17|18|14|16|19)\d{9}$/;
  157. if (!regmobile.test(mobile)) {
  158. return false;;
  159. }
  160. return true;
  161. }
  162. const convertUrlObj = (data) => {
  163. var _result = [];
  164. for (var key in data) {
  165. var value = data[key];
  166. if (value.constructor == Array) {
  167. value.forEach(function(_value) {
  168. _result.push(key + "=" + _value);
  169. });
  170. } else {
  171. _result.push(key + '=' + value);
  172. }
  173. }
  174. console.log('Obj==', _result.join('&'))
  175. return _result.join('&');
  176. }
  177. // 隐藏手机号中间四位
  178. function styleHintText(tel) {
  179. if (tel) {
  180. var reg = /^(\d{6})\d{8}(\d{4})$/;
  181. tel = tel.replace(reg, "$1********$2");
  182. }
  183. return tel;
  184. }
  185. function getDateDiff(dateTimeStamp) {
  186. var minute = 1000 * 60;
  187. var hour = minute * 60;
  188. var day = hour * 24;
  189. var halfamonth = day * 15;
  190. var month = day * 30;
  191. var now = new Date().getTime();
  192. var diffValue = now - dateTimeStamp;
  193. if (diffValue < 0) {
  194. return;
  195. }
  196. var monthC = diffValue / month;
  197. var weekC = diffValue / (7 * day);
  198. var dayC = diffValue / day;
  199. var hourC = diffValue / hour;
  200. var minC = diffValue / minute;
  201. if (monthC >= 1) {
  202. result = "" + parseInt(monthC) + "月前";
  203. } else if (weekC >= 1) {
  204. result = "" + parseInt(weekC) + "周前";
  205. } else if (dayC >= 1) {
  206. result = "" + parseInt(dayC) + "天前";
  207. } else if (hourC >= 1) {
  208. result = "" + parseInt(hourC) + "小时前";
  209. } else if (minC >= 1) {
  210. result = "" + parseInt(minC) + "分钟前";
  211. } else
  212. result = "刚刚";
  213. return result;
  214. }
  215. // 金钱
  216. function toDecimal(x) {
  217. var f = Math.round(x * 100) / 100;
  218. var s = f.toString();
  219. var rs = s.indexOf('.');
  220. if (rs < 0) {
  221. rs = s.length;
  222. s += '.';
  223. }
  224. while (s.length <= rs + 2) {
  225. s += '0';
  226. }
  227. return s;
  228. }
  229. // 判断对否为微信浏览器
  230. function isWeixin() {
  231. var ua = navigator.userAgent.toLowerCase();
  232. if (ua.match(/MicroMessenger/i) == 'micromessenger') {
  233. return true;
  234. } else {
  235. return false;
  236. }
  237. }
  238. //获取时间区域段
  239. function getTimeText(startTime, endTime, isText) {
  240. let text = ''
  241. let curD = new Date(); //今年
  242. let curYear = curD.getFullYear();
  243. let sd = new Date(startTime.replace(/-/g, '/')); //开始时间
  244. let syear = sd.getFullYear();
  245. let smonth = sd.getMonth() + 1 < 10 ? '0' + (sd.getMonth() + 1) : sd.getMonth() + 1;
  246. let sday = sd.getDate() < 10 ? '0' + sd.getDate() : sd.getDate();
  247. let sh = sd.getHours() < 10 ? '0' + sd.getHours() : sd.getHours();
  248. let sm = sd.getMinutes() < 10 ? '0' + sd.getMinutes() : sd.getMinutes();
  249. let ss = sd.getSeconds() < 10 ? '0' + sd.getSeconds() : sd.getSeconds();
  250. let sy, st, sdate, sText; //年月日,时
  251. if (sh == 0 && sm == 0 && ss == 0) st = 0; //时间是00:00:00
  252. console.log('st==', st)
  253. if (curYear == syear) sdate = smonth + '.' + sday;
  254. else sdate = syear + '.' + smonth + '.' + sday;
  255. if (st == 0) sText = sdate;
  256. else sText = sdate + ' ' + sh + ':' + sm + (ss == 0 ? '' : ':' + ss);
  257. let ed, eyear, emonth, eday, eh, em, es;
  258. let ey, et, edate, eText;
  259. console.log('endTime==', endTime)
  260. if (endTime) {
  261. ed = new Date(endTime.replace(/-/g, '/')); //结束时间
  262. eyear = ed.getFullYear();
  263. emonth = ed.getMonth() + 1 < 10 ? '0' + (ed.getMonth() + 1) : ed.getMonth() + 1;
  264. eday = ed.getDate() < 10 ? '0' + ed.getDate() : ed.getDate();
  265. eh = ed.getHours() < 10 ? '0' + ed.getHours() : ed.getHours();
  266. em = ed.getMinutes() < 10 ? '0' + ed.getMinutes() : ed.getMinutes();
  267. es = ed.getSeconds() < 10 ? '0' + ed.getSeconds() : ed.getSeconds();
  268. if (eh == 0 && em == 0 && es == 0) et = 0; //时间是00:00:00
  269. if (curYear == eyear) edate = emonth + '.' + eday;
  270. else if (syear == eyear) edate = eday;
  271. else edate = eyear + '.' + emonth + '.' + eday;
  272. if (et == 0) eText = edate;
  273. else eText = edate + ' ' + eh + ':' + em + (es == 0 ? '' : ':' + es);
  274. console.log('emonth==', emonth)
  275. }
  276. // 整合数据
  277. if (startTime && endTime) text = sText + (isText ? '至' : '-') + eText;
  278. else text = sText;
  279. return text;
  280. }
  281. // 时间字符串返回时分
  282. function captureTime(time, isTime) {
  283. var fullTime = time; // 日期字符串
  284. // console.log(fullTime + '----');
  285. var timeArr = fullTime.replace(" ", ":").replace(/\:/g, "-").split("-");
  286. var nian = timeArr[0];
  287. var yue = timeArr[1];
  288. var ri = timeArr[2];
  289. var shi = timeArr[3];
  290. var fen = timeArr[4];
  291. var miao = timeArr[5];
  292. // console.log(nian + '-' + yue + '-' + ri + ' ' + shi + ':' + fen + ':' + miao);
  293. var str = shi + ':' + fen;
  294. var date = nian + '-' + yue + '-' + ri;
  295. // var str = yue + '-' + ri + ' ' + shi + ':' + fen;
  296. // console.log(str);
  297. if (isTime) {
  298. return str
  299. } else {
  300. return date
  301. }
  302. }
  303. function openMapNavigation(latitude, longitude, name, address) {
  304. // https://apis.map.qq.com/uri/v1/marker?marker=coord:39.892326,116.342763;
  305. // title:超好吃冰激凌;
  306. // addr:手帕口桥北铁路道口&
  307. // referer=myapp
  308. var url = 'https://apis.map.qq.com/uri/v1/marker?marker=coord:' + latitude + ',' + longitude + ';title:' +
  309. name +
  310. ';addr:' + address + '&referer=绿萝云'
  311. window.location.href = url;
  312. }
  313. module.exports = {
  314. formatTimeComm:formatTimeComm,
  315. formatTime: formatTime,
  316. formatTimes: formatTimes,
  317. formatDayTimes: formatDayTimes,
  318. equalsObj: equalsObj,
  319. isObject: isObject,
  320. isArray: isArray,
  321. transTime: transTime,
  322. throttle: throttle,
  323. getPreMonth: getPreMonth,
  324. isMobile: isMobile,
  325. convertUrlObj: convertUrlObj,
  326. getDateDiff: getDateDiff,
  327. styleHintText: styleHintText,
  328. toDecimal: toDecimal,
  329. isWeixin: isWeixin,
  330. getTimeText: getTimeText,
  331. captureTime: captureTime,
  332. openMapNavigation: openMapNavigation
  333. };