util.js 10.0 KB

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