util.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. //工具类
  2. let util = {}
  3. //复制
  4. util.copy=content=>{
  5. uni.setClipboardData({ data: content });
  6. }
  7. util.preview=async (src)=> {
  8. const urls = typeof src === 'string' ? [src] : src
  9. const filePath = async src => src.match(/^http/) ? src : (await uni.compressImage({ src, quality: 100 }))[1].tempFilePath
  10. for (let i = 0; i < urls.length; i++) {
  11. urls[i] = await filePath(urls[i])
  12. }
  13. uni.previewImage({ urls })
  14. },
  15. // 图片缓存
  16. //拨打电话
  17. util.call=phone=>{
  18. uni.showModal({
  19. title: '提示',
  20. content: `确定要拨打电话:${phone}吗?`,
  21. success: function (res) {
  22. if (res.confirm) {
  23. uni.makePhoneCall({
  24. phoneNumber: phone //仅为示例
  25. });
  26. }
  27. }
  28. });
  29. }
  30. util.showModal=(content,title='提示')=>{
  31. return new Promise((resolve,reject)=>{
  32. uni.showModal({
  33. title: title,
  34. content: content,
  35. success: (res)=>{
  36. resolve(res)
  37. }
  38. });
  39. })
  40. }
  41. //是否为手机号码
  42. util.isPhone = phone => {
  43. let pat = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/
  44. return pat.test(phone)
  45. }
  46. //去除两边空格
  47. util.trim = value => {
  48. if (value) {
  49. return value.replace(/^\s+|\s+$/gm, '')
  50. }
  51. return ''
  52. }
  53. //根据QueryString参数名称获取值
  54. util.getQueryStringByName = (url, name) => {
  55. var result = url.match(new RegExp('[?&]' + name + '=([^&]+)', 'i'))
  56. if (result == null || result.length < 1) {
  57. return ''
  58. }
  59. return result[1]
  60. }
  61. //四舍五入保留2位小数(不够位数,则用0替补)
  62. util.keepTwoDecimalFull = num => {
  63. var result = parseFloat(num)
  64. if (isNaN(result)) {
  65. return false
  66. }
  67. result = Math.round(num * 100) / 100
  68. var s_x = result.toString()
  69. var pos_decimal = s_x.indexOf('.')
  70. if (pos_decimal < 0) {
  71. pos_decimal = s_x.length
  72. s_x += '.'
  73. }
  74. while (s_x.length <= pos_decimal + 2) {
  75. s_x += '0'
  76. }
  77. return s_x
  78. }
  79. /**
  80. * 数组去重
  81. * @param {Array} arr 源数组
  82. *
  83. * @return {Array} newArr 去重后的数组
  84. */
  85. util.uniqueArray = (arr)=>{
  86. let newArr = []
  87. arr.forEach(item => {
  88. return newArr.includes(item) ? '' : newArr.push(item)
  89. })
  90. return newArr
  91. }
  92. util.checkMobile = phoneStr => {
  93. if (phoneStr.length < 11) {
  94. return false
  95. } else if (!/^1[3|4|5|6|7|8][0-9]\d{4,8}$/.test(phoneStr)) {
  96. return false
  97. } else {
  98. return true
  99. }
  100. }
  101. /**
  102. * 序列化对象
  103. * @param {Object} data 标准JS对象 { key:value,... }
  104. */
  105. util.serialize = (data, isEncode = false) => {
  106. if (!data) return ''
  107. var pairs = []
  108. for (var name in data) {
  109. if (!data.hasOwnProperty(name)) continue
  110. if (typeof data[name] === 'function') continue
  111. var value =
  112. data[name] != null && typeof data[name] != 'undefined'
  113. ? data[name].toString()
  114. : ''
  115. if (isEncode) {
  116. name = encodeURIComponent(name)
  117. value = encodeURIComponent(value)
  118. }
  119. pairs.push(name + '=' + value)
  120. }
  121. return pairs.join('&')
  122. }
  123. //获取某一个页面上下文 context
  124. util.getPageCtx = (idx = 0) => {
  125. let pages = getCurrentPages()
  126. if (pages.length > 0) {
  127. return pages[pages.length - 1 - idx] || {}
  128. }
  129. return {}
  130. }
  131. //获取当前页面路由
  132. util.getCurrentRoute = () => {
  133. let page = util.getPageCtx()
  134. if (page.route) {
  135. return page.route
  136. }
  137. return ''
  138. }
  139. /* ======================== 时间日期 begin ========================== */
  140. //日期转字符串
  141. util.dateToString = (date)=>{
  142. var year = date.getFullYear();
  143. var month =(date.getMonth() + 1).toString();
  144. var day = (date.getDate()).toString();
  145. if (month.length == 1) {
  146. month = "0" + month;
  147. }
  148. if (day.length == 1) {
  149. day = "0" + day;
  150. }
  151. var dateTime = year + "-" + month + "-" + day;
  152. return dateTime;
  153. }
  154. //字符串转日期
  155. util.stringToDate = (dateStr,separator)=>{
  156. if(!separator){
  157. separator="-";
  158. }
  159. var dateArr = dateStr.split(separator);
  160. var year = parseInt(dateArr[0]);
  161. var month;
  162. if(dateArr[1].indexOf("0") == 0){
  163. month = parseInt(dateArr[1].substring(1));
  164. }else{
  165. month = parseInt(dateArr[1]);
  166. }
  167. var day = parseInt(dateArr[2]);
  168. var date = new Date(year,month -1,day);
  169. return date;
  170. }
  171. /**
  172. * 天数加减
  173. * date传入你需要的日期,格式"xxxx-xx-xx"。addDays传要加减的日期数,往前传正数,往后传负数
  174. */
  175. util.addDay=(date,addDays)=>{
  176. var Dates = new Date(date);
  177. Dates.setDate(Dates.getDate() + addDays);
  178. var mon = Dates.getMonth() + 1,
  179. day = Dates.getDate();
  180. if(mon < 10){
  181. mon = "0" + mon;//月份小于10,在前面补充0
  182. }
  183. if(day < 10){
  184. day = "0" + day;//日小于10,在前面补充0
  185. }
  186. return Dates.getFullYear() + "-" + mon + "-" +day;
  187. }
  188. // 时间函数-tian=0(获取当前时间)-accuracy=1(获取年月日)
  189. util.getTime = (tian, accuracy) => {
  190. //获取当前时间戳
  191. var timestamp = Date.parse(new Date())
  192. timestamp = timestamp / 1000
  193. var tomorrow_timetamp = timestamp - tian * 24 * 60 * 60
  194. var date = new Date(tomorrow_timetamp * 1000)
  195. //年
  196. var Y = date.getFullYear()
  197. //月
  198. var M =
  199. date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
  200. //日
  201. var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
  202. //时
  203. var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
  204. //分
  205. var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
  206. //秒
  207. var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
  208. var Time = Y + '-' + M + '-' + D
  209. var Time2 = Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s
  210. if (accuracy == '1') {
  211. return Time
  212. } else {
  213. return Time2
  214. }
  215. }
  216. // 格式化日期 2019-01-01 TT(WW)
  217. util.dateFormat = (
  218. value = new Date(),
  219. format = 'yyyy-MM-dd',
  220. isInit = false
  221. ) => {
  222. if (value) {
  223. var date = typeof value == 'string' ? value.replace(/\-/g, '/') : value
  224. var d = new Date(date)
  225. var week = ''
  226. var label = ''
  227. if (isInit) {
  228. var cdt = new Date()
  229. var cur = new Date(
  230. cdt.getFullYear() + '/' + (cdt.getMonth() + 1) + '/' + cdt.getDate()
  231. )
  232. var diffTime = d.getTime() - cur.getTime()
  233. var oneDayTime = 24 * 60 * 60 * 1000
  234. var twoDayTime = 48 * 60 * 60 * 1000
  235. var threeDayTime = 72 * 60 * 60 * 1000
  236. let weeks = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
  237. if (diffTime > 0) {
  238. if (diffTime <= oneDayTime) {
  239. label = '今天'
  240. } else if (diffTime <= twoDayTime) {
  241. label = '明天'
  242. } else if (diffTime <= threeDayTime) {
  243. label = '后天'
  244. }
  245. }
  246. week = weeks[d.getDay()]
  247. }
  248. var o = {
  249. 'T+': label,
  250. 'W+': week,
  251. 'M+': d.getMonth() + 1, //month
  252. 'd+': d.getDate(), //day
  253. 'h+': d.getHours(), //hour
  254. 'm+': d.getMinutes(), //minute
  255. 's+': d.getSeconds(), //second
  256. 'q+': Math.floor((d.getMonth() + 3) / 3), //quarter
  257. S: d.getMilliseconds() //millisecond
  258. }
  259. if (/(y+)/.test(format)) {
  260. format = format.replace(
  261. RegExp.$1,
  262. (d.getFullYear() + '').substr(4 - RegExp.$1.length)
  263. )
  264. }
  265. for (var k in o) {
  266. if (k == 'T+' && !label) continue
  267. if (new RegExp('(' + k + ')').test(format)) {
  268. format = format.replace(
  269. RegExp.$1,
  270. RegExp.$1.length == 1
  271. ? o[k]
  272. : ('00' + o[k]).substr(('' + o[k]).length)
  273. )
  274. }
  275. }
  276. return format
  277. }
  278. return value
  279. }
  280. // 活动倒计时 需要在外面调用 如:setInterval("countDown()",1000);
  281. util.countDown = (day, hour, minute, second) => {
  282. var flag = false
  283. second -= 1
  284. if (second == 0) {
  285. minute = minute - 1
  286. second = 60
  287. if (minute < 0) {
  288. hour = hour - 1
  289. minute = 59
  290. if (hour < 0) {
  291. day -= 1
  292. hour = 23
  293. if (day < 0) {
  294. flag = true
  295. }
  296. }
  297. }
  298. }
  299. if (flag) {
  300. return '活动结束'
  301. } else {
  302. return day + '天' + hour + '小时' + minute + '分' + second + '秒'
  303. }
  304. }
  305. // 两个时间相差 天 小时 分钟 秒 date1、date2格式:'2019-06-29 14:36:10'或'2019/06/29 14:36:10'
  306. util.timeComparison = (date1, date2) => {
  307. // var date1 = '2019-06-29 14:36:10'; //开始时间
  308. // var date2 = new Date(); //结束时间
  309. var date3 = date2.getTime() - date1.getTime() //时间差的毫秒数
  310. //------------------------------
  311. //计算出相差天数
  312. var days = Math.floor(date3 / (24 * 3600 * 1000))
  313. //计算出小时数
  314. var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  315. var hours = Math.floor(leave1 / (3600 * 1000))
  316. //计算相差分钟数
  317. var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  318. var minutes = Math.floor(leave2 / (60 * 1000))
  319. //计算相差秒数
  320. var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
  321. var seconds = (leave3 / 1000).toFixed(1)
  322. return (
  323. ' 相差 ' +
  324. days +
  325. '天 ' +
  326. hours +
  327. '小时 ' +
  328. minutes +
  329. ' 分钟' +
  330. seconds +
  331. ' 秒'
  332. )
  333. }
  334. util.timeComparisonActive = (date1, date2, isNeedMillSecond = true) => {
  335. // var date1 = '2019-06-29 14:36:10'; //开始时间
  336. // var date2 = new Date(); //结束时间
  337. var date3 = date2.getTime() - date1.getTime() //时间差的毫秒数
  338. if (parseInt(date3) <= 0) {
  339. date3 = 0
  340. }
  341. //------------------------------
  342. //计算出相差天数
  343. var days = Math.floor(date3 / (24 * 3600 * 1000))
  344. //计算出小时数
  345. var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  346. var hours = Math.floor(leave1 / (3600 * 1000))
  347. //计算相差分钟数
  348. var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  349. var minutes = Math.floor(leave2 / (60 * 1000))
  350. //计算相差秒数
  351. var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
  352. if (isNeedMillSecond) {
  353. var seconds = (leave3 / 1000).toFixed(1)
  354. } else {
  355. var seconds = Math.floor(leave3 / 1000)
  356. }
  357. var allSeconds =
  358. days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60 + seconds
  359. hours = days * 24 + hours < 10 ? '0' + (days * 24 + hours) : days * 24 + hours
  360. minutes = minutes < 10 ? '0' + minutes : minutes
  361. seconds = seconds < 10 ? '0' + seconds : seconds
  362. days = days < 10 ? '0' + days : days
  363. var isEnd = allSeconds > 0 ? false : true
  364. return { days, hours, minutes, seconds, isEnd }
  365. }
  366. /**
  367. * 生成日期对象
  368. * @param {String,Number} value 日期 字符串 或者 毫秒数字
  369. * @return {Date} [date = new Date()] 日期对象
  370. */
  371. util.createDate = (value)=>{
  372. let date = typeof (value) == 'string' ? value.replace(/\-/g, '/') : value
  373. return new Date(date)
  374. }
  375. /* ======================== 时间日期 end ========================== */
  376. export default util