const getDateString = date => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() return [year, month, day].map(formatNumber).join('-') } const getTimeString = date => { const hour = date.getHours() const minute = date.getMinutes() return [hour, minute].map(formatNumber).join(':') } const formatTime = date => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') } const formatDate = date => { const year = date.getFullYear()%100 const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute].map(formatNumber).join(':') } const formatNumber = n => { n = n.toString() return n[1] ? n : '0' + n } // 显示繁忙提示 var showBusy = text => wx.showToast({ title: text, icon: 'loading', duration: 10000 }) // 显示成功提示 var showSuccess = text => wx.showToast({ title: text, icon: 'success' }) // 显示失败提示 var showModel = (title, content) => { wx.hideToast(); wx.showModal({ title, content: JSON.stringify(content), showCancel: false }) } // ArrayBuffer转16进度字符串示例 const ab2hex = buffer => { var hexArr = Array.prototype.map.call( new Uint8Array(buffer), function(bit) { return ('00' + bit.toString(16)).slice(-2) } ) return hexArr.join(''); } function isPrime(n) { if (isNaN(n) || !isFinite(n) || n % 1 || n < 2) return false; if (n == leastFactor(n)) return true; return false; } // leastFactor(n) // returns the smallest prime that divides n // NaN if n is NaN or Infinity // 0 if n=0 // 1 if n=1, n=-1, or n is not an integer function leastFactor(n) { if (isNaN(n) || !isFinite(n)) return NaN; if (n == 0) return 0; if (n % 1 || n * n < 2) return 1; if (n % 2 == 0) return 2; if (n % 3 == 0) return 3; if (n % 5 == 0) return 5; var m = Math.sqrt(n); for (var i = 7; i <= m; i += 30) { if (n % i == 0) return i; if (n % (i + 4) == 0) return i + 4; if (n % (i + 6) == 0) return i + 6; if (n % (i + 10) == 0) return i + 10; if (n % (i + 12) == 0) return i + 12; if (n % (i + 16) == 0) return i + 16; if (n % (i + 22) == 0) return i + 22; if (n % (i + 24) == 0) return i + 24; } return n; } function randomPrime() { //取一个8位数的随机数 var random = Math.floor(Math.random() * 90000000 + 10000000); if (isPrime(random)) return random; //取rondom最近的一个素数 var index = 0 var prime = 10000019; while (true) { index++; if (isPrime(random + index)) { prime = random + index; break; } if (isPrime(random - index)) { prime = random - index; break; } } return prime; } function randomPrime6() { //取一个6位数的随机数 var random = Math.floor(Math.random() * 900000 + 100000); if (isPrime(random)) return random; //取rondom最近的一个素数 var index = 0 var prime = 100003; while (true) { index++; if (isPrime(random + index)) { prime = random + index; break; } if (isPrime(random - index)) { prime = random - index; break; } } return prime; } function randomN() { //return 5 //取一个4~15之间的随机数 var random = Math.floor(Math.random() * 15 + 4); if (isPrime(random)) return random; //取rondom最近的一个素数 var index = 0 var prime = 3; while (true) { index++; if (isPrime(random + index)) { prime = random + index; break; } if (isPrime(random - index)) { prime = random - index; break; } } return prime; } // Convert a hex string to a byte array const hexToBytes = hex => { for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16)); return bytes; } // Convert a byte array to a hex string const bytesToHex = bytes => { for (var hex = [], i = 0; i < bytes.length; i++) { hex.push((bytes[i] >>> 4).toString(16)); hex.push((bytes[i] & 0xF).toString(16)); } return hex.join(""); } const macToInt = mac => { var macNew = mac.replace(/:/g, '').substring(4) //console.log('macNew', macNew) var high = parseInt(macNew.substr(0, 4), 16) //console.log('high', high) var low = parseInt(macNew.substr(4, 4), 16) //console.log('low', low) return (high << 16) | low } const hexToInt = hex => { var high = parseInt(hex.substr(0, 4), 16) //console.log('high', high) var low = parseInt(hex.substr(4, 4), 16) //console.log('low', low) return (high << 16) | low } const getLockModel = name => { if (name == undefined || name == null) return 0 if (name.length == 9) { return 1 } else { if (name.indexOf("WSL_A") == 0) { return 1 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_H") == 0) { return 10 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_B") == 0) { return 21 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_N") == 0) { return 30 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_M") == 0) { return 40 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_U") == 0) { return 50 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_J") == 0) { return 60 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_F") == 0) { return 70 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_C") == 0) { return 80 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_O") == 0) { return 90 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSL_D") == 0) { return 100 + parseInt(name.substr(5, 6)) } else if (name.indexOf("WSJ_Q") == 0) { return 10000 + parseInt(name.substr(5, 6)) } else { return 0 } } } const isNbLock = model => { if (model > 30 && model <= 49) { return true } else { return false } } const isUxLock = model => { if (model > 30 && model <= 59) { return true } else { return false } } const isFxLock = model => { if (model > 70 && model <= 79) { return true } else { return false } } const getLockType = model => { if (model > 0 && model <= 9) { return '蓝牙密码锁' } else if (model > 10 && model <= 19) { return '家庭锁系列' } else if (model > 20 && model <= 29) { return '酒店密码锁' } else if (model > 30 && model <= 49 || model > 100 && model <= 109) { return '蓝牙NB锁' } else if (model > 50 && model <= 59 || model > 90 && model <= 99) { return '蓝牙密码锁' } else if (model > 60 && model <= 69) { return '蓝牙NB机柜锁' } else if (model > 70 && model <= 79) { return '蓝牙指纹锁' } else if (model > 80 && model <= 89) { return 'NB指纹锁' } else if (model > 10000 && model <= 10009) { return '取电开关' } } const getLockName = (mac, model) => { var name = mac.replace(/:/g, '_').slice(mac.length - 5, mac.length) if (model == 1) { return `WSL_${name}` } else if (model > 1 && model <= 9) { return `WSL_A${model % 10-1}_${name}` } else if (model > 20 && model <= 29) { return `WSL_B${model % 10-1}_${name}` } else if (model > 10 && model <= 19) { return `WSL_H${model % 10}_${name}` } else if (model > 30 && model <= 39) { return `WSL_N${model % 10}_${name}` } else if (model > 40 && model <= 49) { return `WSL_M${model % 10}_${name}` } else if (model > 50 && model <= 59) { return `WSL_U${model % 10}_${name}` } else if (model > 60 && model <= 69) { return `WSL_J${model % 10}_${name}` } else if (model > 70 && model <= 79) { return `WSL_F${model % 10}_${name}` } else if (model > 80 && model <= 89) { return `WSL_C${model % 10}_${name}` } else if (model > 90 && model <= 99) { return `WSL_O${model % 10}_${name}` } else if (model > 100 && model <= 109) { return `WSL_D${model % 10}_${name}` } else if (model > 10000 && model <= 10009) { return `WSJ_Q${model % 10}_${name}` } } //得到标准时区的时间的函数 function getLocalTime(i) { //参数i为时区值数字,比如北京为东八区则输进8,西5输入-5 if (typeof i !== 'number') return; var d = new Date(); //得到1970年一月一日到现在的秒数 var len = d.getTime(); //本地时间与GMT时间的时间偏移差 var offset = d.getTimezoneOffset() * 60000; //得到现在的格林尼治时间 var utcTime = len + offset; return new Date(utcTime + 3600000 * i); } //得到标准时区的时间的函数 function getLocalTimeByZone(d, i) { //参数i为时区值数字,比如北京为东八区则输进8,西5输入-5 if (typeof i !== 'number') return; //var d = new Date(); //得到1970年一月一日到现在的秒数 var len = d.getTime(); //本地时间与GMT时间的时间偏移差 var offset = d.getTimezoneOffset() * 60000; //得到现在的格林尼治时间 var utcTime = len + offset; return new Date(utcTime + 3600000 * i); } module.exports = { getDateString, getTimeString, formatTime, formatDate, showBusy, showSuccess, showModel, isPrime, randomPrime, randomPrime6, randomN, ab2hex, bytesToHex, hexToBytes, macToInt, hexToInt, getLockModel, getLockType, getLockName, isUxLock, isNbLock, isFxLock, getLocalTime }