1class Util { 2 static isNull(data){ 3 switch (data){ 4 case null: return true 5 case undefined: return true 6 case '': return true 7 default: return !data 8 } 9 } 10 11 static testStr({str,type}){ 12 var reg = "" 13 switch(type){ 14 case "email":{ 15 reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/ 16 break; 17 } 18 case "idCard":{ 19 reg = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ 20 break; 21 } 22 } 23 if(this.isNull(str)||!reg.test(str))return false 24 return true 25 } 26 static dateFormat(fmt, str) { 27 //var date = new Date(str.replace(/-/g, '/').replace('T', ' ').replace('.000+0000', '') + ' GMT'); 28 29 var date="" 30 // 妿æ¯å¸¦ZçISOæ ¼å¼ 31 if (str.includes('Z')) { 32 date = new Date(str); 33 }else{ 34 date = new Date(str.replace(/-/g, '/').replace('T', ' ').replace('.000+0000', '') + ' GMT');// 妿æ¯å¸¦+0000çæ ¼å¼ 35 } 36 let ret; 37 const opt = { 38 "Y+": date.getFullYear().toString(), // å¹´ 39 "m+": (date.getMonth() + 1).toString(), // æ 40 "d+": date.getDate().toString(), // æ¥ 41 "H+": date.getHours().toString(), // æ¶ 42 "M+": date.getMinutes().toString(), // å 43 "S+": date.getSeconds().toString() // ç§ 44 // æå ¶ä»æ ¼å¼ååç¬¦éæ±å¯ä»¥ç»§ç»æ·»å ï¼å¿ 须转åæå符串 45 }; 46 for (let k in opt) { 47 ret = new RegExp("(" + k + ")").exec(fmt); 48 if (ret) { 49 //fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))); 50 fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (this.pad(opt[k],ret[1].length))); 51 }; 52 }; 53 return fmt; 54 } 55 /* è´¨æ´é¿åæ³ by lifesinger */ 56 static pad(num, n) { 57 var len = num.toString().length; 58 while(len < n) { 59 num = "0" + num; 60 len++; 61 } 62 return num; 63 } 64 //è·åè·ç°å¨æ¶é´å·® 65 static getEndTime({fmt='YYYY.mm.dd HH:MM:SS',publishTime}){ 66 /* 67 *publishTime:å表æ¶é´ 68 */ 69 let endTime = "" 70 let nowTime = new Date().getTime() 71 let time = new Date(publishTime).getTime() 72 let timeD = nowTime - time 73 if(timeD>0){ 74 if(timeD<60*60*24*1000){ 75 timeD = String(timeD).slice(0,-3) 76 timeD = Number(timeD) 77 let dayD = Math.floor(timeD/3600/24) 78 let hoursD = Math.floor(timeD/3600) 79 let minutesD = Math.floor(timeD/60) 80 if(dayD>0){ 81 endTime = `${dayD}天å` 82 }else if(hoursD>0){ 83 endTime = `${hoursD}å°æå` 84 }else if(minutesD>0){ 85 endTime = `${minutesD}åéå` 86 }else{ 87 endTime = `åå` 88 } 89 }else{ 90 endTime = this.dateFormat(fmt,publishTime) 91 } 92 } 93 return endTime 94 } 95 //è·åè·ç°å¨æ¶é´å·®ä¸¦åçµ 96 static getEndTimeArr({fmt='YYYY.mm.dd HH:MM:SS',publishTime}){ 97 /* 98 *publishTime:å表æ¶é´ 99 */ 100 let endTime = "" 101 let nowTime = new Date().getTime() 102 let time = new Date(publishTime).getTime() 103 let timeD = nowTime - time 104 if(timeD>0){ 105 if(timeD<60*60*24*1000){ 106 timeD = String(timeD).slice(0,-3) 107 timeD = Number(timeD) 108 let dayD = Math.floor(timeD/3600/24) 109 let hoursD = Math.floor(timeD/3600) 110 let minutesD = Math.floor(timeD/60) 111 if(dayD>0){ 112 endTime = `${dayD}天å` 113 }else if(hoursD>0){ 114 endTime = `${hoursD}å°æå` 115 }else if(minutesD>0){ 116 endTime = `${minutesD}åéå` 117 }else{ 118 endTime = `åå` 119 } 120 }else{ 121 endTime = this.dateFormat(fmt,publishTime) 122 } 123 } 124 let endTimeArr = endTime.split(" ") 125 return endTimeArr 126 } 127 //æ·±æ·è´ 128 static deepCopy({obj}){ 129 return JSON.parse(JSON.stringify(obj)) 130 } 131 //æ¯å¦ä¸ºçµè端 132 static isPc(){ 133 let userAgent = navigator.userAgent.toLowerCase(); 134 // ç¨ test å¹é æµè§å¨ä¿¡æ¯ 135 if (/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(userAgent)||window.innerWidth<=1099) { 136 return false 137 } else { 138 return true 139 } 140 } 141 //æ¯å¦ä¸ºçµè端 142 static isPcV5(){ 143 if (window.innerWidth<=992) { 144 return false 145 } else { 146 return true 147 } 148 } 149 static isPad(){ 150 if (window.innerWidth<=992&&window.innerWidth>576) { 151 return true 152 } else { 153 return false 154 } 155 } 156 static isPhone(){ 157 if (window.innerWidth<=576) { 158 return true 159 } else { 160 return false 161 } 162 } 163 /*å»é*/ 164 static uniqueFunc(arr, uniId){ 165 const res = new Map(); 166 return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1)); 167 } 168 /*è®ååç*/ 169 static getImgSrc(files,i){ 170 return new Promise((resolve,reject)=>{ 171 var file = files.item(i); 172 if (!(/^image\/.*$/i.test(file.type))) { 173 resolve(false) //䏿¯å¾ç 就跳åºè¿ä¸æ¬¡å¾ªç¯ 174 } 175 //å®ä¾åFileReader API 176 var freader = new FileReader();
177 freader.readAsDataURL(file); 178 freader.onload = function(e) { 179 resolve(e.target.result) 180 } 181 freader.onerror = function(e){ 182 resolve(false) 183 } 184 }) 185 } 186 /*å¤å®å¾®ä¿¡*/ 187 static is_weixin(){ 188 var ua = navigator.userAgent.toLowerCase(); 189 if(ua.match(/MicroMessenger/i)=="micromessenger") { 190 return true; 191 } else { 192 return false; 193 } 194 } 195 /*æ·±æ·è´*/ 196 static deepCopyObjectWithMethods(obj) { 197 if (typeof obj !== 'object' || obj === null) { 198 return obj; // éå¯¹è±¡ç´æ¥è¿ååå¼ 199 } 200 let copy = Array.isArray(obj) ? [] : {}; 201 for (let key in obj) { 202 if (Object.prototype.hasOwnProperty.call(obj, key)) { 203 if (typeof obj[key] === 'object') { 204 copy[key] = this.deepCopyObjectWithMethods(obj[key]); // éå½è°ç¨æ·±æ·è´å½æ° 205 } else { 206 copy[key] = obj[key]; // åºæ¬ç±»åç´æ¥èµå¼ 207 } 208 } 209 } 210 return Object.assign({}, copy); // å°æ°å建ç对象ä¸åå§å¯¹è±¡åå¹¶ 211 } 212 static formatTimestamp(timestamp, format) { 213 const date = new Date(Number(timestamp)); 214 215 const year = date.getFullYear();
216 const month = String(date.getMonth() + 1).padStart(2, '0'); // æä»½ä»0å¼å§ï¼éå 1 217 const day = String(date.getDate()).padStart(2, '0'); 218 const hours = String(date.getHours()).padStart(2, '0'); 219 const minutes = String(date.getMinutes()).padStart(2, '0'); 220 const seconds = String(date.getSeconds()).padStart(2, '0'); 221 222 switch (format) { 223 case 'YYYY-mm-dd HH:mm:ss': 224 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; 225 case 'YYYY.mm.dd HH:mm:ss': 226 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; 227 case 'YYYY-mm-dd': 228 return `${year}-${month}-${day}`; 229 case 'HH:mm:ss': 230 return `${hours}:${minutes}:${seconds}`; 231 case 'dd/mm/yyyy': 232 return `${day}/${month}/${year}`; 233 case 'YYYYå¹´mmæddæ¥': 234 return `${year}å¹´${month}æ${day}æ¥`; 235 case 'mmæddæ¥': 236 return `${month}æ${day}æ¥`; 237 case 'YYYYmmdd': 238 return `${year}${month}${day}`; 239 default: 240 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // é»è®¤æ ¼å¼ 241 } 242 } 243 static getHotEwStoryUrl({jsonUrl}){ 244 let url = "https://epaper.tkww.hk/wenweipo/storyContent?jsonLink=" + encodeURIComponent(jsonUrl.replace("www.wenweipo.com","www.tkww.hk/channels/wenweipo/todaywenwei")) 245 return url 246 } 247 static getEwStoryUrl({jsonUrl}){ 248 let url = "https://epaper.tkww.hk/wenweipo/storyContent?jsonLink=" + encodeURIComponent(jsonUrl) 249 return url 250 } 251 static getEwColumnUrl({columnUuid}){ 252 let url ="https://epaper.tkww.hk/wenweipo/public?columnUuid="+encodeURIComponent(columnUuid) 253 return url 254 } 255 static getDevicePixelRatio(){ 256 // å ¼å®¹æå°æ°ä¸æ¯æè¯¥å±æ§çæµè§å¨ï¼å¦èæ§ IEï¼ 257 return window?.devicePixelRatio?Math.ceil(window?.devicePixelRatio):1; 258 } 259} 260export default Util
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.