|
|
@@ -0,0 +1,561 @@
|
|
|
+// 比较微信版本v1:用户当前版本;v2:当前程序所需要求兼容的版本
|
|
|
+function compareVersion(v1, v2) {
|
|
|
+ v1 = v1.split('.')
|
|
|
+ v2 = v2.split('.')
|
|
|
+ const len = Math.max(v1.length, v2.length)
|
|
|
+
|
|
|
+ while (v1.length < len) {
|
|
|
+ v1.push('0')
|
|
|
+ }
|
|
|
+ while (v2.length < len) {
|
|
|
+ v2.push('0')
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = 0; i < len; i++) {
|
|
|
+ const num1 = parseInt(v1[i])
|
|
|
+ const num2 = parseInt(v2[i])
|
|
|
+
|
|
|
+ if (num1 > num2) {
|
|
|
+ return 1
|
|
|
+ } else if (num1 < num2) {
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
+/* 系统当前日期+时间 */
|
|
|
+function formatTime(date) {
|
|
|
+ var year = date.getFullYear()
|
|
|
+ var month = date.getMonth() + 1
|
|
|
+ var day = date.getDate()
|
|
|
+
|
|
|
+ var hour = date.getHours()
|
|
|
+ var minute = date.getMinutes()
|
|
|
+ var second = date.getSeconds()
|
|
|
+
|
|
|
+
|
|
|
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
|
|
|
+}
|
|
|
+
|
|
|
+function formatTime2(date) {
|
|
|
+ var year = date.getFullYear()
|
|
|
+ var month = date.getMonth() + 1
|
|
|
+ var day = date.getDate()
|
|
|
+
|
|
|
+
|
|
|
+ return [year, month, day].map(formatNumber).join('-')
|
|
|
+}
|
|
|
+
|
|
|
+function formatTime3(number, format) {
|
|
|
+
|
|
|
+ var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
|
|
|
+ var returnArr = [];
|
|
|
+
|
|
|
+ var date = new Date(number * 1000);
|
|
|
+ returnArr.push(date.getFullYear());
|
|
|
+ returnArr.push(formatNumber(date.getMonth() + 1));
|
|
|
+ returnArr.push(formatNumber(date.getDate()));
|
|
|
+
|
|
|
+ returnArr.push(formatNumber(date.getHours()));
|
|
|
+ returnArr.push(formatNumber(date.getMinutes()));
|
|
|
+ returnArr.push(formatNumber(date.getSeconds()));
|
|
|
+
|
|
|
+ for (var i in returnArr) {
|
|
|
+ format = format.replace(formateArr[i], returnArr[i]);
|
|
|
+ }
|
|
|
+ return format;
|
|
|
+}
|
|
|
+
|
|
|
+function formatNumber(n) {
|
|
|
+ n = n.toString()
|
|
|
+ return n[1] ? n : '0' + n
|
|
|
+}
|
|
|
+/* 日期转时间戳 */
|
|
|
+function timeToUnix(stringTime) {
|
|
|
+ if (stringTime) {
|
|
|
+ var timestamp = Date.parse(new Date(stringTime));
|
|
|
+ } else {
|
|
|
+ var timestamp = Date.parse(new Date());
|
|
|
+ }
|
|
|
+ timestamp = timestamp / 1000;
|
|
|
+ return timestamp;
|
|
|
+}
|
|
|
+/* 倒计时:时+分+秒 */
|
|
|
+function changeTimeStamp(timeStamp, hasTimeRemaining) {
|
|
|
+ var distancetime;
|
|
|
+ if(hasTimeRemaining){
|
|
|
+ distancetime = timeStamp;
|
|
|
+ }else{
|
|
|
+ var curTimeStamp = timeToUnix();
|
|
|
+ distancetime = parseInt(timeStamp) - curTimeStamp;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (distancetime > 0) {
|
|
|
+ //如果大于0.说明尚未到达截止时间
|
|
|
+ var day = Math.floor(distancetime / (60 * 60 * 24));
|
|
|
+ var hour = Math.floor(distancetime / (60 * 60)) - (day * 24);
|
|
|
+ var minute = Math.floor(distancetime / 60) - (day * 24 * 60) - (hour * 60);
|
|
|
+ var second = Math.floor(distancetime) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
|
|
|
+
|
|
|
+ hour = parseInt(hour) + parseInt(day) * 24;
|
|
|
+ if (hour < 10) {
|
|
|
+ hour = "0" + hour;
|
|
|
+ }
|
|
|
+ if (minute < 10) {
|
|
|
+ minute = "0" + minute;
|
|
|
+ }
|
|
|
+ if (second < 10) {
|
|
|
+ second = "0" + second;
|
|
|
+ }
|
|
|
+
|
|
|
+ return [hour, minute, second];
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// md5
|
|
|
+function md5(string) {
|
|
|
+ var x = Array();
|
|
|
+ var k, AA, BB, CC, DD, a, b, c, d;
|
|
|
+ var S11 = 7,
|
|
|
+ S12 = 12,
|
|
|
+ S13 = 17,
|
|
|
+ S14 = 22;
|
|
|
+ var S21 = 5,
|
|
|
+ S22 = 9,
|
|
|
+ S23 = 14,
|
|
|
+ S24 = 20;
|
|
|
+ var S31 = 4,
|
|
|
+ S32 = 11,
|
|
|
+ S33 = 16,
|
|
|
+ S34 = 23;
|
|
|
+ var S41 = 6,
|
|
|
+ S42 = 10,
|
|
|
+ S43 = 15,
|
|
|
+ S44 = 21;
|
|
|
+ string = Utf8Encode(string);
|
|
|
+ x = ConvertToWordArray(string);
|
|
|
+ a = 0x67452301;
|
|
|
+ b = 0xEFCDAB89;
|
|
|
+ c = 0x98BADCFE;
|
|
|
+ d = 0x10325476;
|
|
|
+ for (k = 0; k < x.length; k += 16) {
|
|
|
+ AA = a;
|
|
|
+ BB = b;
|
|
|
+ CC = c;
|
|
|
+ DD = d;
|
|
|
+ a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
|
|
|
+ d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
|
|
|
+ c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
|
|
|
+ b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
|
|
|
+ a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
|
|
|
+ d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
|
|
|
+ c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
|
|
|
+ b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
|
|
|
+ a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
|
|
|
+ d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
|
|
|
+ c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
|
|
|
+ b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
|
|
|
+ a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
|
|
|
+ d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
|
|
|
+ c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
|
|
|
+ b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
|
|
|
+ a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
|
|
|
+ d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
|
|
|
+ c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
|
|
|
+ b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
|
|
|
+ a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
|
|
|
+ d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
|
|
|
+ c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
|
|
|
+ b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
|
|
|
+ a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
|
|
|
+ d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
|
|
|
+ c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
|
|
|
+ b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
|
|
|
+ a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
|
|
|
+ d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
|
|
|
+ c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
|
|
|
+ b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
|
|
|
+ a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
|
|
|
+ d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
|
|
|
+ c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
|
|
|
+ b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
|
|
|
+ a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
|
|
|
+ d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
|
|
|
+ c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
|
|
|
+ b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
|
|
|
+ a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
|
|
|
+ d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
|
|
|
+ c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
|
|
|
+ b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
|
|
|
+ a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
|
|
|
+ d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
|
|
|
+ c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
|
|
|
+ b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
|
|
|
+ a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
|
|
|
+ d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
|
|
|
+ c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
|
|
|
+ b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
|
|
|
+ a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
|
|
|
+ d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
|
|
|
+ c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
|
|
|
+ b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
|
|
|
+ a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
|
|
|
+ d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
|
|
|
+ c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
|
|
|
+ b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
|
|
|
+ a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
|
|
|
+ d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
|
|
|
+ c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
|
|
|
+ b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
|
|
|
+ a = AddUnsigned(a, AA);
|
|
|
+ b = AddUnsigned(b, BB);
|
|
|
+ c = AddUnsigned(c, CC);
|
|
|
+ d = AddUnsigned(d, DD);
|
|
|
+ }
|
|
|
+ var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
|
|
|
+ return temp.toUpperCase();
|
|
|
+}
|
|
|
+
|
|
|
+function RotateLeft(lValue, iShiftBits) {
|
|
|
+ return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
|
|
+}
|
|
|
+
|
|
|
+function AddUnsigned(lX, lY) {
|
|
|
+ var lX4, lY4, lX8, lY8, lResult;
|
|
|
+ lX8 = (lX & 0x80000000);
|
|
|
+ lY8 = (lY & 0x80000000);
|
|
|
+ lX4 = (lX & 0x40000000);
|
|
|
+ lY4 = (lY & 0x40000000);
|
|
|
+ lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
|
|
|
+ if (lX4 & lY4) {
|
|
|
+ return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
|
|
+ }
|
|
|
+ if (lX4 | lY4) {
|
|
|
+ if (lResult & 0x40000000) {
|
|
|
+ return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
|
|
+ } else {
|
|
|
+ return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return (lResult ^ lX8 ^ lY8);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function F(x, y, z) {
|
|
|
+ return (x & y) | ((~x) & z);
|
|
|
+}
|
|
|
+
|
|
|
+function G(x, y, z) {
|
|
|
+ return (x & z) | (y & (~z));
|
|
|
+}
|
|
|
+
|
|
|
+function H(x, y, z) {
|
|
|
+ return (x ^ y ^ z);
|
|
|
+}
|
|
|
+
|
|
|
+function I(x, y, z) {
|
|
|
+ return (y ^ (x | (~z)));
|
|
|
+}
|
|
|
+
|
|
|
+function FF(a, b, c, d, x, s, ac) {
|
|
|
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
|
|
|
+ return AddUnsigned(RotateLeft(a, s), b);
|
|
|
+}
|
|
|
+
|
|
|
+function GG(a, b, c, d, x, s, ac) {
|
|
|
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
|
|
|
+ return AddUnsigned(RotateLeft(a, s), b);
|
|
|
+}
|
|
|
+
|
|
|
+function HH(a, b, c, d, x, s, ac) {
|
|
|
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
|
|
|
+ return AddUnsigned(RotateLeft(a, s), b);
|
|
|
+}
|
|
|
+
|
|
|
+function II(a, b, c, d, x, s, ac) {
|
|
|
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
|
|
|
+ return AddUnsigned(RotateLeft(a, s), b);
|
|
|
+}
|
|
|
+
|
|
|
+function ConvertToWordArray(string) {
|
|
|
+ var lWordCount;
|
|
|
+ var lMessageLength = string.length;
|
|
|
+ var lNumberOfWords_temp1 = lMessageLength + 8;
|
|
|
+ var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
|
|
|
+ var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
|
|
|
+ var lWordArray = Array(lNumberOfWords - 1);
|
|
|
+ var lBytePosition = 0;
|
|
|
+ var lByteCount = 0;
|
|
|
+ while (lByteCount < lMessageLength) {
|
|
|
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
|
|
+ lBytePosition = (lByteCount % 4) * 8;
|
|
|
+ lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
|
|
|
+ lByteCount++;
|
|
|
+ }
|
|
|
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
|
|
+ lBytePosition = (lByteCount % 4) * 8;
|
|
|
+ lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
|
|
|
+ lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
|
|
|
+ lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
|
|
|
+ return lWordArray;
|
|
|
+}
|
|
|
+
|
|
|
+function WordToHex(lValue) {
|
|
|
+ var WordToHexValue = "",
|
|
|
+ WordToHexValue_temp = "",
|
|
|
+ lByte, lCount;
|
|
|
+ for (lCount = 0; lCount <= 3; lCount++) {
|
|
|
+ lByte = (lValue >>> (lCount * 8)) & 255;
|
|
|
+ WordToHexValue_temp = "0" + lByte.toString(16);
|
|
|
+ WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
|
|
|
+ }
|
|
|
+ return WordToHexValue;
|
|
|
+}
|
|
|
+
|
|
|
+function Utf8Encode(string) {
|
|
|
+ var utftext = "";
|
|
|
+ for (var n = 0; n < string.length; n++) {
|
|
|
+ var c = string.charCodeAt(n);
|
|
|
+ if (c < 128) {
|
|
|
+ utftext += String.fromCharCode(c);
|
|
|
+ } else if ((c > 127) && (c < 2048)) {
|
|
|
+ utftext += String.fromCharCode((c >> 6) | 192);
|
|
|
+ utftext += String.fromCharCode((c & 63) | 128);
|
|
|
+ } else {
|
|
|
+ utftext += String.fromCharCode((c >> 12) | 224);
|
|
|
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
|
|
+ utftext += String.fromCharCode((c & 63) | 128);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return utftext;
|
|
|
+}
|
|
|
+// md5 end
|
|
|
+
|
|
|
+// base64_encode
|
|
|
+function base64_encode(str) { // 编码,配合encodeURIComponent使用
|
|
|
+ var c1, c2, c3;
|
|
|
+ var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
|
+ var i = 0,
|
|
|
+ len = str.length,
|
|
|
+ strin = '';
|
|
|
+ while (i < len) {
|
|
|
+ c1 = str.charCodeAt(i++) & 0xff;
|
|
|
+ if (i == len) {
|
|
|
+ strin += base64EncodeChars.charAt(c1 >> 2);
|
|
|
+ strin += base64EncodeChars.charAt((c1 & 0x3) << 4);
|
|
|
+ strin += "==";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ c2 = str.charCodeAt(i++);
|
|
|
+ if (i == len) {
|
|
|
+ strin += base64EncodeChars.charAt(c1 >> 2);
|
|
|
+ strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
|
|
|
+ strin += base64EncodeChars.charAt((c2 & 0xF) << 2);
|
|
|
+ strin += "=";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ c3 = str.charCodeAt(i++);
|
|
|
+ strin += base64EncodeChars.charAt(c1 >> 2);
|
|
|
+ strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
|
|
|
+ strin += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
|
|
|
+ strin += base64EncodeChars.charAt(c3 & 0x3F)
|
|
|
+ }
|
|
|
+ return strin
|
|
|
+}
|
|
|
+
|
|
|
+function base64_decode(input) { // 解码,配合decodeURIComponent使用
|
|
|
+ var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
|
+ var output = "";
|
|
|
+ var chr1, chr2, chr3;
|
|
|
+ var enc1, enc2, enc3, enc4;
|
|
|
+ var i = 0;
|
|
|
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
|
+ while (i < input.length) {
|
|
|
+ enc1 = base64EncodeChars.indexOf(input.charAt(i++));
|
|
|
+ enc2 = base64EncodeChars.indexOf(input.charAt(i++));
|
|
|
+ enc3 = base64EncodeChars.indexOf(input.charAt(i++));
|
|
|
+ enc4 = base64EncodeChars.indexOf(input.charAt(i++));
|
|
|
+ chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
|
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
|
+ chr3 = ((enc3 & 3) << 6) | enc4;
|
|
|
+ output = output + String.fromCharCode(chr1);
|
|
|
+ if (enc3 != 64) {
|
|
|
+ output = output + String.fromCharCode(chr2);
|
|
|
+ }
|
|
|
+ if (enc4 != 64) {
|
|
|
+ output = output + String.fromCharCode(chr3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return utf8_decode(output);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function utf8_decode(utftext) { // utf-8解码
|
|
|
+ var string = '';
|
|
|
+ let i = 0;
|
|
|
+ let c = 0;
|
|
|
+ let c1 = 0;
|
|
|
+ let c2 = 0;
|
|
|
+ while (i < utftext.length) {
|
|
|
+ c = utftext.charCodeAt(i);
|
|
|
+ if (c < 128) {
|
|
|
+ string += String.fromCharCode(c);
|
|
|
+ i++;
|
|
|
+ } else if ((c > 191) && (c < 224)) {
|
|
|
+ c1 = utftext.charCodeAt(i + 1);
|
|
|
+ string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
|
|
|
+ i += 2;
|
|
|
+ } else {
|
|
|
+ c1 = utftext.charCodeAt(i + 1);
|
|
|
+ c2 = utftext.charCodeAt(i + 2);
|
|
|
+ string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
|
|
|
+ i += 3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return string;
|
|
|
+}
|
|
|
+// base64_encode end
|
|
|
+
|
|
|
+// emoji图片表情转表情字符串
|
|
|
+function emoji_utf16toEntities(str='') {
|
|
|
+ var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则
|
|
|
+ str = str.replace(patt, function (char) {
|
|
|
+ var H, L, code;
|
|
|
+ if (char.length === 2) {
|
|
|
+ H = char.charCodeAt(0); // 取出高位
|
|
|
+ L = char.charCodeAt(1); // 取出低位
|
|
|
+ code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
|
|
|
+ return "&#" + code + ";";
|
|
|
+ } else {
|
|
|
+ return char;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return str;
|
|
|
+}
|
|
|
+
|
|
|
+// 表情字符串转emoji图片表情
|
|
|
+function emoji_uncodeUtf16(str='') {
|
|
|
+ var reg = /\&#.*?;/g;
|
|
|
+ var result = str.replace(reg, function (char) {
|
|
|
+ var H, L, code;
|
|
|
+ if (char.length == 9) {
|
|
|
+ code = parseInt(char.match(/[0-9]+/g));
|
|
|
+ H = Math.floor((code - 0x10000) / 0x400) + 0xD800;
|
|
|
+ L = (code - 0x10000) % 0x400 + 0xDC00;
|
|
|
+ return unescape("%u" + H.toString(16) + "%u" + L.toString(16));
|
|
|
+ } else {
|
|
|
+ return char;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return result;
|
|
|
+}
|
|
|
+// 时间戳转日期
|
|
|
+function formatDateTime(timeStamp, type = 'datetime', delimiter = '-') {
|
|
|
+ var date = new Date();
|
|
|
+ // date.setTime(timeStamp / 1000);
|
|
|
+ date.setTime(timeStamp);
|
|
|
+ var y = date.getFullYear();
|
|
|
+ var m = date.getMonth() + 1;
|
|
|
+ m = m < 10 ? ('0' + m) : m;
|
|
|
+ var d = date.getDate();
|
|
|
+ d = d < 10 ? ('0' + d) : d;
|
|
|
+ var h = date.getHours();
|
|
|
+ h = h < 10 ? ('0' + h) : h;
|
|
|
+ var minute = date.getMinutes();
|
|
|
+ var second = date.getSeconds();
|
|
|
+ minute = minute < 10 ? ('0' + minute) : minute;
|
|
|
+ second = second < 10 ? ('0' + second) : second;
|
|
|
+ if (type == 'date') {
|
|
|
+ return y + delimiter + m + delimiter + d;
|
|
|
+ }
|
|
|
+ if (type == 'datehm') {
|
|
|
+ return y + delimiter + m + delimiter + d + ' ' + h + ':' + minute;
|
|
|
+ }
|
|
|
+ if (type == 'hz') {
|
|
|
+ return y + "年" + m + "月" + d + '日 ' + h + '时' + minute + '分' + second + '秒';
|
|
|
+ }
|
|
|
+ if (type == 'hzhm') {
|
|
|
+ return y + "年" + m + "月" + d + '日 ' + h + '时' + minute + '分';
|
|
|
+ }
|
|
|
+ return y + delimiter + m + delimiter + d + ' ' + h + ':' + minute + ':' + second;
|
|
|
+};
|
|
|
+/**
|
|
|
+ * canvas绘图相关,把文字转化成只能行数,多余显示省略号
|
|
|
+ * ctx: 当前的canvas
|
|
|
+ * text: 文本
|
|
|
+ * contentWidth: 文本最大宽度
|
|
|
+ * lineNumber: 显示几行
|
|
|
+ */
|
|
|
+function transformContentToMultiLineText(ctx, text='', contentWidth, lineNumber) {
|
|
|
+ var textArray = text.split(""); // 分割成字符串数组
|
|
|
+ var temp = "";
|
|
|
+ var row = [];
|
|
|
+
|
|
|
+ for (var i = 0; i < textArray.length; i++) {
|
|
|
+ if (ctx.measureText(temp).width < contentWidth) {
|
|
|
+ temp += textArray[i];
|
|
|
+ } else {
|
|
|
+ i--; // 这里添加i--是为了防止字符丢失
|
|
|
+ row.push(temp);
|
|
|
+ temp = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.push(temp);
|
|
|
+
|
|
|
+ // 如果数组长度大于2,则截取前两个
|
|
|
+ if (row.length > lineNumber) {
|
|
|
+ var rowCut = row.slice(0, lineNumber);
|
|
|
+ var rowPart = rowCut[lineNumber-1];
|
|
|
+ var test = "";
|
|
|
+ var empty = [];
|
|
|
+ for (var a = 0; a < rowPart.length; a++) {
|
|
|
+ if (ctx.measureText(test).width < contentWidth) {
|
|
|
+ test += rowPart[a];
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ empty.push(test); // 处理后面加省略号
|
|
|
+ var group = empty[0] + '...'
|
|
|
+ rowCut.splice(lineNumber - 1, 1, group);
|
|
|
+ row = rowCut;
|
|
|
+ }
|
|
|
+
|
|
|
+ return row;
|
|
|
+}
|
|
|
+
|
|
|
+/* 保留两位小数 */
|
|
|
+function getTwoFloat(num = 0) {
|
|
|
+ return (Math.round(num * 100) / 100).toFixed(2);
|
|
|
+}
|
|
|
+//验证手机号码
|
|
|
+function checkPhoneNum(str){
|
|
|
+ if (!str || str == '') {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ var phoneTest = /(^1[3|4|5|6|7|8|9][0-9]{9}$)/;
|
|
|
+ return phoneTest.test(str);
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = {
|
|
|
+ compareVersion: compareVersion,
|
|
|
+ formatTime: formatTime,
|
|
|
+ formatTime2: formatTime2,
|
|
|
+ formatTime3: formatTime3,
|
|
|
+ unxiNum: timeToUnix,
|
|
|
+ changeTimeStamp: changeTimeStamp,
|
|
|
+ md5: md5,
|
|
|
+ base64_encode,
|
|
|
+ base64_decode,
|
|
|
+ utf8_decode,
|
|
|
+ emoji_utf16toEntities,
|
|
|
+ emoji_uncodeUtf16,
|
|
|
+ formatDateTime,
|
|
|
+ transformContentToMultiLineText,
|
|
|
+ getTwoFloat
|
|
|
+}
|