index.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. /**
  2. *
  3. * 将单个字符串的首字母大写
  4. */
  5. export function fistLetterUpper(str) {
  6. return str.charAt(0).toUpperCase() + str.slice(1)
  7. }
  8. //将秒转化为时分秒
  9. export function formateSeconds(endTime){
  10. let secondTime = parseInt(endTime)//将传入的秒的值转化为Number
  11. let min = 0// 初始化分
  12. let h =0// 初始化小时
  13. let result=''
  14. if(secondTime>60){//如果秒数大于60,将秒数转换成整数
  15. min=parseInt(secondTime/60)//获取分钟,除以60取整数,得到整数分钟
  16. secondTime=parseInt(secondTime%60)//获取秒数,秒数取佘,得到整数秒数
  17. if(min>60){//如果分钟大于60,将分钟转换成小时
  18. h=parseInt(min/60)//获取小时,获取分钟除以60,得到整数小时
  19. min=parseInt(min%60) //获取小时后取佘的分,获取分钟除以60取佘的分
  20. }
  21. }
  22. result=`${h.toString().padStart(2,'0')}:${min.toString().padStart(2,'0')}:${secondTime.toString().padStart(2,'0')}`
  23. return result
  24. }
  25. /**
  26. *
  27. * 时分秒
  28. */
  29. export function SecondToDate(msd) {
  30. var time =msd
  31. if (null != time && "" != time) {
  32. if (time > 60 && time < 60 * 60) {
  33. time = parseInt(time / 60.0) + ":" + parseInt((parseFloat(time / 60.0) -
  34. parseInt(time / 60.0)) * 60);
  35. }
  36. else if (time >= 60 * 60 && time < 60 * 60 * 24) {
  37. time = parseInt(time / 3600.0) + ":" + parseInt((parseFloat(time / 3600.0) -
  38. parseInt(time / 3600.0)) * 60) + ":" +
  39. parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
  40. parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60);
  41. } else if (time >= 60 * 60 * 24) {
  42. time = parseInt(time / 3600.0/24) + ":" +parseInt((parseFloat(time / 3600.0/24)-
  43. parseInt(time / 3600.0/24))*24) + ":" + parseInt((parseFloat(time / 3600.0) -
  44. parseInt(time / 3600.0)) * 60) + ":" +
  45. parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
  46. parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60);
  47. }
  48. else {
  49. time = parseInt(time);
  50. }
  51. }
  52. return time;
  53. }
  54. function compareVersion(v1, v2) {
  55. v1 = v1.split('.')
  56. v2 = v2.split('.')
  57. const len = Math.max(v1.length, v2.length)
  58. while (v1.length < len) {
  59. v1.push('0')
  60. }
  61. while (v2.length < len) {
  62. v2.push('0')
  63. }
  64. for (let i = 0; i < len; i++) {
  65. const num1 = parseInt(v1[i])
  66. const num2 = parseInt(v2[i])
  67. if (num1 > num2) {
  68. return 1
  69. } else if (num1 < num2) {
  70. return -1
  71. }
  72. }
  73. return 0
  74. }
  75. /**
  76. *
  77. * @desccrition: 对String类型去除空格的拓展
  78. * @dir : 被去除空格所在的位置
  79. * @test: ie6-9 chrome firefox
  80. */
  81. export function trim(str, dir) {
  82. switch (dir) {
  83. case 0: // 去左边的空格
  84. return str.replace(/(^\s*)/g, '')
  85. case 1: // 去右边的空格
  86. return str.replace(/(\s*$)/g, '')
  87. case 2: // 去掉所有的空格
  88. return str.replace(/(\s*)/g, '')
  89. default:
  90. // 去掉两边的空格
  91. return str.replace(/(^\s*)|(\s*$)/g, '')
  92. }
  93. }
  94. /**
  95. * 判断是否字符串
  96. * @param->o : 传入的参数,参数可以为任何类型。
  97. * @return: true表示为字符串,false为非字符串
  98. */
  99. export function isString(o) {
  100. // 是否字符串
  101. return Object.prototype.toString.call(o).slice(8, -1) === 'String'
  102. }
  103. /**
  104. *
  105. * @descrition : 该函数的功能是判断转入的参数是否为数字类型。
  106. * @param->o : 传入的参数,参数可以为任何类型。
  107. * @return: true表示为数字,false为非数字
  108. *
  109. */
  110. export function isNumber(o) {
  111. // 是否数字
  112. return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
  113. }
  114. export function isObject(o) {
  115. // 是否对象
  116. return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
  117. }
  118. export function isArray(o) {
  119. // 是否数组
  120. return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
  121. }
  122. export function isDate(o) {
  123. // 是否时间
  124. return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
  125. }
  126. export function isBoolean(o) {
  127. // 是否boolean
  128. return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
  129. }
  130. export function isFunction(o) {
  131. // 是否函数
  132. return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
  133. }
  134. export function isNull(o) {
  135. // 是否为null
  136. return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
  137. }
  138. export function isUndefined(o) {
  139. // 是否undefined
  140. return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
  141. }
  142. export function isFalse(o) {
  143. if (
  144. o === '' ||
  145. o === undefined ||
  146. o === null ||
  147. o === 'null' ||
  148. o === 'undefined' ||
  149. o === 0 ||
  150. o === false ||
  151. isNaN(o)
  152. ) {
  153. return true
  154. }
  155. return false
  156. }
  157. export function isTrue(o) {
  158. if (
  159. o === '' ||
  160. o === undefined ||
  161. o === null ||
  162. o === 'null' ||
  163. o === 'undefined' ||
  164. o === 0 ||
  165. o === false ||
  166. isNaN(o)
  167. ) {
  168. return false
  169. }
  170. return true
  171. }
  172. export function browserType() {
  173. var userAgent = navigator.userAgent // 取得浏览器的userAgent字符串
  174. var isOpera = userAgent.indexOf('Opera') > -1 // 判断是否Opera浏览器
  175. var isIE =
  176. userAgent.indexOf('compatible') > -1 &&
  177. userAgent.indexOf('MSIE') > -1 &&
  178. !isOpera // 判断是否IE浏览器
  179. var isEdge = userAgent.indexOf('Edge') > -1 // 判断是否IE的Edge浏览器
  180. var isFF = userAgent.indexOf('Firefox') > -1 // 判断是否Firefox浏览器
  181. var isSafari =
  182. userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') === -1 // 判断是否Safari浏览器
  183. var isChrome =
  184. userAgent.indexOf('Chrome') > -1 && userAgent.indexOf('Safari') > -1 // 判断Chrome浏览器
  185. if (isIE) {
  186. var reIE = new RegExp('MSIE (\\d+\\.\\d+);')
  187. reIE.test(userAgent)
  188. var fIEVersion = parseFloat(RegExp['$1'])
  189. if (fIEVersion === 7) return 'IE7'
  190. else if (fIEVersion === 8) return 'IE8'
  191. else if (fIEVersion === 9) return 'IE9'
  192. else if (fIEVersion === 10) return 'IE10'
  193. else if (fIEVersion === 11) return 'IE11'
  194. else return 'IE7以下' // IE版本过低
  195. }
  196. if (isFF) return 'FF'
  197. if (isOpera) return 'Opera'
  198. if (isEdge) return 'Edge'
  199. if (isSafari) return 'Safari'
  200. if (isChrome) return 'Chrome'
  201. }
  202. export function typeOf(obj) {
  203. const toString = Object.prototype.toString
  204. const map = {
  205. '[object Boolean]': 'boolean',
  206. '[object Number]': 'number',
  207. '[object String]': 'string',
  208. '[object Function]': 'function',
  209. '[object Array]': 'array',
  210. '[object Date]': 'date',
  211. '[object RegExp]': 'regExp',
  212. '[object Undefined]': 'undefined',
  213. '[object Null]': 'null',
  214. '[object Object]': 'object'
  215. }
  216. return map[toString.call(obj)]
  217. }
  218. /**
  219. * 数组去重的方法
  220. * @param {*} arr 执行去重的数据
  221. * @returns {array} 返回去重结束的数组
  222. */
  223. export function arrayUnique(someArray) {
  224. let tempArray = someArray.slice(0) // 复制数组到临时数组
  225. for (var i = 0; i < tempArray.length; i++) {
  226. for (var j = i + 1; j < tempArray.length;) {
  227. if (tempArray[j] === tempArray[i]) {
  228. // 后面的元素若和待比较的相同,则删除并计数;
  229. // 删除后,后面的元素会自动提前,所以指针j不移动
  230. tempArray.splice(j, 1)
  231. } else {
  232. j++
  233. } // 不同,则指针移动
  234. }
  235. }
  236. return tempArray
  237. }
  238. /**
  239. * 小于10补0
  240. * @param {*} n
  241. */
  242. export function formatDigit(n) {
  243. return n.toString().replace(/^(\d)$/, '0$1')
  244. }
  245. /**
  246. * 千分位显示,常用于价格的显示
  247. * @param {*} num
  248. */
  249. export function toThousands(num) {
  250. return parseFloat(num)
  251. .toFixed(2)
  252. .replace(/(\d{1,3})(?=(\d{3})+(?:\.))/g, '$1,')
  253. }
  254. /**
  255. * 浮点数的加法
  256. * @param {*} arg1
  257. * @param {*} arg2
  258. */
  259. export function floatAdd(arg1, arg2) {
  260. var r1, r2, m
  261. try {
  262. r1 = arg1.toString().split('.')[1].length
  263. } catch (e) {
  264. r1 = 0
  265. }
  266. try {
  267. r2 = arg2.toString().split('.')[1].length
  268. } catch (e) {
  269. r2 = 0
  270. }
  271. m = Math.pow(10, Math.max(r1, r2))
  272. return (parseFloat(arg1) * m + parseFloat(arg2) * m) / m
  273. }
  274. /**
  275. * 浮点数的乘法
  276. * @param {*} arg1
  277. * @param {*} arg2
  278. */
  279. export function floatMul(arg1, arg2) {
  280. var m = 0
  281. var s1 = arg1.toString()
  282. var s2 = arg2.toString()
  283. try {
  284. m += s1.split('.')[1].length
  285. } catch (e) {}
  286. try {
  287. m += s2.split('.')[1].length
  288. } catch (e) {}
  289. return (
  290. (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /
  291. Math.pow(10, m)
  292. )
  293. }
  294. /*
  295. * 银行卡每四位空格
  296. */
  297. export function formatCardNo(cardNo) {
  298. cardNo += ''
  299. return cardNo
  300. .replace(/\s/g, '')
  301. .replace(/[^\d]/g, '')
  302. .replace(/(\d{4})(?=\d)/g, '$1 ')
  303. }
  304. /**
  305. * 时间戳转为格式化时间字符串
  306. * @param {date} timestamp [时间戳]
  307. * @param {string} formats [时间格式] 1. Y-M-D/2. Y-M-D h:m:s/3. Y年M月D日/4. Y年M月D日 h时m分/5. Y年M月D日 h时m分s秒
  308. */
  309. export function formatDate(timestamp, formats) {
  310. /*
  311. formats格式包括
  312. 1. Y-M-D
  313. 2. Y-M-D h:m:s
  314. 3. Y年M月D日
  315. 4. Y年M月D日 h时m分
  316. 5. Y年M月D日 h时m分s秒
  317. 示例:console.log(formatDate(1500305226034, 'Y年M月D日 h:m:s')) ==> 2017年07月17日 23:27:06
  318. */
  319. formats = formats || 'Y-M-D'
  320. var myDate = timestamp ? new Date(timestamp) : new Date()
  321. var year = myDate.getFullYear()
  322. var month = formatDigit(myDate.getMonth() + 1)
  323. var day = formatDigit(myDate.getDate())
  324. var hour = formatDigit(myDate.getHours())
  325. var minute = formatDigit(myDate.getMinutes())
  326. var second = formatDigit(myDate.getSeconds())
  327. var ddd = {
  328. Y: year,
  329. M: month,
  330. D: day,
  331. h: hour,
  332. m: minute,
  333. s: second
  334. }
  335. return formats.replace(/Y|M|D|h|m|s/g, function(matches) {
  336. return ddd[matches]
  337. })
  338. // 小于10补0
  339. function formatDigit(n) {
  340. return n.toString().replace(/^(\d)$/, '0$1')
  341. }
  342. }
  343. /*
  344. * obj 转 params字符串参数
  345. * 例子:{a:1,b:2} => a=1&b=2
  346. */
  347. export function objParseParam(obj) {
  348. let paramsStr = ''
  349. if (obj instanceof Array) return paramsStr
  350. if (!(obj instanceof Object)) return paramsStr
  351. for (let key in obj) {
  352. paramsStr += `${key}=${obj[key]}&`
  353. }
  354. return paramsStr.substring(0, paramsStr.length - 1)
  355. }
  356. /*
  357. * obj 转 路由地址带参数
  358. * 例子:{a:1,b:2} => /pages/index/index?a=1&b=2
  359. */
  360. export function objParseUrlAndParam(path, obj) {
  361. let url = path || '/'
  362. let paramsStr = ''
  363. if (obj instanceof Array) return url
  364. if (!(obj instanceof Object)) return url
  365. if (obj instanceof Array) {
  366. paramsStr = ''
  367. }
  368. if (!(obj instanceof Object)) {
  369. paramsStr = ''
  370. }
  371. for (let key in obj) {
  372. paramsStr += `${key}=${obj[key]}&`
  373. paramsStr = paramsStr.substring(0, paramsStr.length - 1)
  374. }
  375. if (paramsStr) {
  376. if (url.indexOf('?') === -1) {
  377. url = `${url}?${paramsStr}`
  378. } else {
  379. url = url.replace('?', `?${paramsStr}&`)
  380. }
  381. }
  382. return url
  383. }
  384. /*
  385. * 获取url字符串参数
  386. */
  387. export function getRequestParameters(locationhref) {
  388. let href = locationhref || ''
  389. let theRequest = new Object()
  390. let str = href.split('?')[1]
  391. if (str != undefined) {
  392. let strs = str.split('&')
  393. for (let i = 0; i < strs.length; i++) {
  394. theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
  395. }
  396. }
  397. return theRequest
  398. }
  399. /**
  400. * 获取应用使用平台标识
  401. */
  402. export function getPlatformType() {
  403. // #ifdef APP-PLUS
  404. return 'app'
  405. // #endif
  406. // #ifdef MP-WEIXIN
  407. return 'wxapp'
  408. // #endif
  409. // #ifdef H5
  410. return 'h5'
  411. // #endif
  412. return 'h5'
  413. }
  414. /**
  415. * 获取区分h5平台的具体环境
  416. */
  417. export function getPlatform() {
  418. let user_platform = getPlatformType()
  419. if (user_platform == 'h5') {
  420. let ua = navigator.userAgent.toLowerCase()
  421. let isWeixin = ua.indexOf('micromessenger') != -1
  422. if (isWeixin) {
  423. user_platform = 'wx'
  424. }
  425. }
  426. return user_platform
  427. }
  428. export default {
  429. // 将单个字符串的首字母大写
  430. fistLetterUpper,
  431. //将秒转化为时分秒
  432. formateSeconds,
  433. // 时分秒
  434. SecondToDate,
  435. // 该函数的功能是判断转入的参数是否为数字类型。
  436. isNumber,
  437. // 该函数的功能是判断转入的参数是否为字符串类型。
  438. isString,
  439. // 该函数的功能是判断转入的参数是否为对象类型。
  440. isObject,
  441. // 该函数的功能是判断转入的参数是否为数组类型。
  442. isArray,
  443. // 该函数的功能是判断转入的参数是否为日期类型。
  444. isDate,
  445. // 该函数的功能是判断转入的参数是否为布尔类型。
  446. isBoolean,
  447. // 该函数的功能是判断转入的参数是否为函数类型。
  448. isFunction,
  449. // 该函数的功能是判断转入的参数是否为null类型。
  450. isNull,
  451. // 该函数的功能是判断转入的参数是否为underfined类型。
  452. isUndefined,
  453. // 该函数的功能是判断转入的参数是否为false。(0,false,undefined,null,'', ' ', NaN)都属于false
  454. isFalse,
  455. // 该函数的功能是判断转入的参数是否为true。
  456. isTrue,
  457. // 去除空格 type = 默认去除左右空格 0 左边空格 1 右边空格 2 所有空格
  458. trim,
  459. // 判断浏览器类型
  460. browserType,
  461. // 判断类型
  462. typeOf,
  463. // 数组去重
  464. arrayUnique,
  465. // 变成两位小数
  466. toThousands,
  467. // 浮点数的加法
  468. floatAdd,
  469. // 浮点数的乘法
  470. floatMul,
  471. // 时间戳转为格式化时间字符串
  472. formatDate,
  473. // 小于10补0
  474. formatDigit,
  475. // 银行卡每4位空格
  476. formatCardNo,
  477. // {a:1,b:2} => a=1&b=2
  478. objParseParam,
  479. // ('/pages/index/index', {a:1,b:2}) => /pages/index/index?a=1&b=2
  480. objParseUrlAndParam,
  481. // 获取url字符串参数
  482. getRequestParameters,
  483. // 获取应用使用平台标识
  484. getPlatformType,
  485. // 获取区分h5平台的具体环境
  486. getPlatform,
  487. compareVersion
  488. }