Foundation.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. /**
  2. * 一些常用的基础方法
  3. * whetherNavigate 登录后跳转判断
  4. * unixToDate 将unix时间戳转换为指定格式
  5. * dateToUnix 将时间转unix时间戳
  6. * deepClone 对一个对象进行深拷贝
  7. * formatPrice 货币格式化
  8. * secrecyMobile 手机号隐私保护
  9. * randomString 随机生成指定长度的字符串
  10. */
  11. const millisecondsPerDay = 1000 * 60 * 60 * 24;
  12. /**
  13. * 验证银行卡号
  14. */
  15. export function checkBankno(bankno) {
  16. var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位(与luhm进行比较)
  17. var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
  18. var newArr = [];
  19. for (var i = first15Num.length - 1; i > -1; i--) {
  20. //前15或18位倒序存进数组
  21. newArr.push(first15Num.substr(i, 1));
  22. }
  23. var arrJiShu = []; //奇数位*2的积 <9
  24. var arrJiShu2 = []; //奇数位*2的积 >9
  25. var arrOuShu = []; //偶数位数组
  26. for (var j = 0; j < newArr.length; j++) {
  27. if ((j + 1) % 2 == 1) {
  28. //奇数位
  29. if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
  30. else arrJiShu2.push(parseInt(newArr[j]) * 2);
  31. } //偶数位
  32. else arrOuShu.push(newArr[j]);
  33. }
  34. var jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
  35. var jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
  36. for (var h = 0; h < arrJiShu2.length; h++) {
  37. jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
  38. jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
  39. }
  40. var sumJiShu = 0; //奇数位*2 < 9 的数组之和
  41. var sumOuShu = 0; //偶数位数组之和
  42. var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
  43. var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
  44. var sumTotal = 0;
  45. for (var m = 0; m < arrJiShu.length; m++) {
  46. sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
  47. }
  48. for (var n = 0; n < arrOuShu.length; n++) {
  49. sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
  50. }
  51. for (var p = 0; p < jishu_child1.length; p++) {
  52. sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
  53. sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
  54. }
  55. //计算总和
  56. sumTotal =
  57. parseInt(sumJiShu) +
  58. parseInt(sumOuShu) +
  59. parseInt(sumJiShuChild1) +
  60. parseInt(sumJiShuChild2);
  61. //计算Luhm值
  62. var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
  63. var luhm = 10 - k;
  64. if (lastNum == luhm) {
  65. return true;
  66. } else {
  67. return false;
  68. }
  69. }
  70. /**
  71. * 登录后跳转判断
  72. * 计算出当前router路径
  73. * 1.如果跳转的链接为登录页面或跳转的链接为空页面。则会重新跳转到首页
  74. * 2.都不满足返回跳转页面
  75. * @param type 'default' || 'wx' //返回地址会做判断默认为default
  76. */
  77. export function whetherNavigate(type = "default") {
  78. let navigation =
  79. getCurrentPages()[getCurrentPages().length - getCurrentPages().length];
  80. if (getCurrentPages().length > 1) {
  81. console.log(navigation, getCurrentPages());
  82. if (navigation.route == "pages/passport/login") {
  83. navigationToBack(type);
  84. } else {
  85. if (!navigation.route || navigation.route == "undefined") {
  86. navigationToBack(type);
  87. } else {
  88. uni.navigateBack({
  89. delta: getCurrentPages().length,
  90. });
  91. }
  92. }
  93. } else {
  94. uni.switchTab({
  95. url: "/pages/tabbar/home/index",
  96. });
  97. }
  98. }
  99. /**
  100. * 创建Date
  101. * @param time
  102. * @returns {*|Date}
  103. */
  104. export function createDate(time) {
  105. if (arguments.length === 0 || !time) {
  106. return null;
  107. }
  108. let date;
  109. if (typeof time === "object") {
  110. date = time;
  111. } else {
  112. if (typeof time === "string" && /^[0-9]+$/.test(time)) {
  113. time = parseInt(time);
  114. } else if (typeof time === "string") {
  115. // @TODO: 不替换-,可能有问题,待测
  116. time = time.replace(new RegExp(/-/gm), '/')
  117. }
  118. if (typeof time === "number" && time.toString().length === 10) {
  119. time = time * 1000;
  120. }
  121. date = new Date(time);
  122. }
  123. return date;
  124. }
  125. /**
  126. * 计算2个日期相差多少天
  127. * @param startDate
  128. * @param endDate
  129. * @returns {*|number}
  130. */
  131. export function subDays(startTime, endTime) {
  132. if (arguments.length === 0 || !startTime || !endTime) {
  133. return 0;
  134. }
  135. let days = 0;
  136. let startDate = createDate(startTime);
  137. let endDate = createDate(endTime);
  138. startDate = new Date(`${startDate.getFullYear()}/${startDate.getMonth()}/${startDate.getDate()}`)
  139. endDate = new Date(`${endDate.getFullYear()}/${endDate.getMonth()}/${endDate.getDate()}`)
  140. days = (endDate - startDate) / millisecondsPerDay
  141. return days;
  142. }
  143. /**
  144. * 计算2个时间相差多少秒
  145. * @param startTime
  146. * @param endTime
  147. * @returns {*|number}
  148. */
  149. export function subSeconds(startTime, endTime) {
  150. if (arguments.length === 0 || !startTime || !endTime) {
  151. return 0;
  152. }
  153. let seconds = 0;
  154. let startDate = createDate(startTime);
  155. let endDate = createDate(endTime);
  156. seconds = (endDate - startDate)
  157. return seconds;
  158. }
  159. /**
  160. * 将unix时间戳转换为指定格式
  161. * @param unix 时间戳【秒】
  162. * @param format 转换格式
  163. * @returns {*|string}
  164. */
  165. export function unixToDate(unix, format) {
  166. if (!unix) return unix;
  167. let _format = format || "yyyy-MM-dd hh:mm:ss";
  168. const d = new Date(unix);
  169. const o = {
  170. "M+": d.getMonth() + 1,
  171. "d+": d.getDate(),
  172. "h+": d.getHours(),
  173. "m+": d.getMinutes(),
  174. "s+": d.getSeconds(),
  175. "q+": Math.floor((d.getMonth() + 3) / 3),
  176. S: d.getMilliseconds(),
  177. };
  178. if (/(y+)/.test(_format))
  179. _format = _format.replace(
  180. RegExp.$1,
  181. (d.getFullYear() + "").substr(4 - RegExp.$1.length)
  182. );
  183. for (const k in o)
  184. if (new RegExp("(" + k + ")").test(_format))
  185. _format = _format.replace(
  186. RegExp.$1,
  187. RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
  188. );
  189. return _format;
  190. }
  191. /**
  192. * 将时间转unix时间戳
  193. * @param date
  194. * @returns {number} 【秒】
  195. */
  196. export function dateToUnix(date) {
  197. let newStr = date.replace(/:/g, "-");
  198. newStr = newStr.replace(/ /g, "-");
  199. const arr = newStr.split("-");
  200. const datum = new Date(
  201. Date.UTC(
  202. arr[0],
  203. arr[1] - 1,
  204. arr[2],
  205. arr[3] - 8 || -8,
  206. arr[4] || 0,
  207. arr[5] || 0
  208. )
  209. );
  210. return parseInt(datum.getTime() / 1000);
  211. }
  212. /**
  213. * 货币格式化
  214. * @param price
  215. * @returns {string}
  216. */
  217. export function formatPrice(price) {
  218. if (typeof price !== "number") return price;
  219. return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  220. }
  221. /**
  222. * 手机号隐私保护
  223. * 隐藏中间四位数字
  224. * @param mobile
  225. * @returns {*}
  226. */
  227. export function secrecyMobile(mobile) {
  228. mobile = String(mobile);
  229. if (!/\d{11}/.test(mobile)) {
  230. return mobile;
  231. }
  232. return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
  233. }
  234. /**
  235. * 随机生成指定长度的字符串
  236. * @param length
  237. * @returns {string}
  238. */
  239. export function randomString(length = 32) {
  240. const chars =
  241. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  242. const maxPos = chars.length;
  243. let _string = "";
  244. for (let i = 0; i < length; i++) {
  245. _string += chars.charAt(Math.floor(Math.random() * maxPos));
  246. }
  247. return _string;
  248. }
  249. /**
  250. * 计算传秒数的倒计时【天、时、分、秒】
  251. * @param seconds
  252. * @returns {{day : *, hours : *, minutes : *, seconds : *}}
  253. */
  254. export function countTimeDown(seconds) {
  255. const leftTime = (time) => {
  256. if (time < 10) time = "0" + time;
  257. return time + "";
  258. };
  259. return {
  260. day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
  261. hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
  262. minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
  263. seconds: leftTime(parseInt(seconds % 60, 10)),
  264. };
  265. }
  266. function navigationToBack(type) {
  267. if (type == "wx") {
  268. // console.log(getCurrentPages().length - 3)
  269. uni.navigateBack({
  270. delta: getCurrentPages().length,
  271. });
  272. } else {
  273. uni.switchTab({
  274. url: "/pages/tabbar/home/index",
  275. });
  276. }
  277. }
  278. /**
  279. * 计算当前时间到第二天0点的倒计时[秒]
  280. * @returns {number}
  281. */
  282. export function theNextDayTime() {
  283. const nowDate = new Date();
  284. const time =
  285. new Date(
  286. nowDate.getFullYear(),
  287. nowDate.getMonth(),
  288. nowDate.getDate() + 1,
  289. 0,
  290. 0,
  291. 0
  292. ).getTime() - nowDate.getTime();
  293. return parseInt(time / 1000);
  294. }
  295. /**
  296. * 解析url参数
  297. * @example ?id=12345&a=b
  298. * @return Object {id:12345,a:b}
  299. */
  300. export function urlParse(url) {
  301. let obj = {};
  302. let reg = /[?&][^?&]+=[^?&]+/g;
  303. let arr = url.match(reg);
  304. if (arr) {
  305. arr.forEach((item) => {
  306. let tempArr = item.substring(1).split("=");
  307. let key = decodeURIComponent(tempArr[0]);
  308. let val = decodeURIComponent(tempArr.splice(1).join("="));
  309. obj[key] = val;
  310. });
  311. }
  312. return obj;
  313. }
  314. module.exports = {
  315. subDays,
  316. subSeconds,
  317. createDate,
  318. unixToDate,
  319. dateToUnix,
  320. formatPrice,
  321. secrecyMobile,
  322. randomString,
  323. countTimeDown,
  324. theNextDayTime,
  325. whetherNavigate,
  326. checkBankno,
  327. urlParse,
  328. };