shaojie32 лет назад: 2
Родитель
Сommit
aa90f9d13f
1 измененных файлов с 126 добавлено и 3 удалено
  1. 126 3
      vue-next-admin/src/utils/utils.ts

+ 126 - 3
vue-next-admin/src/utils/utils.ts

@@ -1,4 +1,6 @@
 import ruleReg from '/@/utils/ruleReg.ts';
+const synth = window.speechSynthesis;
+const msg = new SpeechSynthesisUtterance();
 const Utils = {
     /**
      * @description 深拷贝的方法
@@ -69,14 +71,81 @@ const Utils = {
         return `${year}-${month}-${day}`;
     },
 
+    // 获取当前时间
+    getTime(format: string = ""){
+        let date = new Date(); //创建时间对象
+        let hours = date.getHours(); //当前年份
+        let minutes:string|number = date.getMinutes(); //当前月份
+        let seconds:string|number = date.getSeconds(); //当前日期
+        minutes = minutes<10 ? '0'+minutes : String(minutes);
+        seconds = seconds<10 ? '0'+seconds : String(seconds);
+        if(format == 'count'){
+            return `${seconds}`;
+        }
+        if(format == 'desc'){
+            return `${hours}:${minutes}`;
+        }
+        return `${hours}:${minutes}:${seconds}`;
+    },
+
+    // 计算今天星期几
+    getWeek(date: any){
+        let week = new Date(date).getDay();
+        switch(Number(week)){
+            case 0:
+                return "星期天";
+            case 1:
+                return "星期一";
+            case 2:
+                return "星期二";
+            case 3:
+                return "星期三";
+            case 4:
+                return "星期四";
+            case 5:
+                return "星期五";
+            case 6:
+                return "星期六";
+        }
+    },
+
+    // 计算当前日期后n天,传负数可以计算前n天  Utils.recentTime(i,"yyyy-MM-dd",date)
+    recentTime(day:any,fmt:any,time:any){ 
+        //获取当前时间的毫秒值
+        let now = (time? new Date(time) :new Date()).getTime();
+        // 获取前后n天时间
+        let recent = new Date(now+day*24*60*60*1000)
+        
+        // key:正则匹配表达式,value:对应的时间、日期
+        let fmtObj = {
+            'M+': recent.getMonth()+1, 		//月份
+            'd+': recent.getDate(),  		//日
+            'h+': recent.getHours(), 		//时
+            'm+': recent.getMinutes(),		//分
+            's+': recent.getSeconds(),		//秒
+        }
+        // 获取匹配年份替换
+        if(/(y+)/.test(fmt)){
+            //RegExp.$1 匹配结果,替换成对应的长度。如:yyyy就替换成整个年份2021,yy就替换成后两位21,以此类推
+            fmt = fmt.replace(RegExp.$1,(recent.getFullYear()+'').substr(4-RegExp.$1.length))
+        }
+        for(let key in fmtObj){
+            if(new RegExp(`(${key})`).test(fmt)){
+                //日期,时、分、秒替换,判断fmt是否需要补0,如:yyyy-M-d h:m:s 不补0,yyyy-MM-dd hh:mm:ss 则自动补0
+                fmt = fmt.replace(RegExp.$1,RegExp.$1.length==1 ? fmtObj[key] : ('00'+fmtObj[key]).substr((''+fmtObj[key]).length))
+            }
+        }
+        return fmt
+    },
+
     /**
      * @description 获取当前日期(自定义格式)
      * @param format 
-     * @returns y-m-d H:M:S, y-m-d, y-m, H:M:S, H:M
+     * @returns y-m-d, y-m, y-m-d H:M:S
      */
     getDateFormat(format: string){
         if(!ruleReg.emptyReg(format)){
-            return '请传入日期格式,支持的格式:y-m-d H:M:S, y-m-d, y-m, H:M:S, H:M';
+            return '请传入日期格式,支持的格式:y-m-d, y-m, y-m-d H:M:S';
         }
         let result;
         let date = new Date();
@@ -101,14 +170,20 @@ const Utils = {
             case 'y-m':
                 result = `${y}-${m}`;
                 break;
+            case 'm-d':
+                result = `${m}-${d}`;
+                break;
             case 'H:M:S':
                 result = `${H}:${M}:${S}`;
                 break;
             case 'H:M':
                 result = `${H}:${M}`;
                 break;
+            case 'M:S':
+                result = `${M}:${S}`;
+                break;
             default:
-                result = `日期格式'${format}'不正确,支持的格式:y-m-d H:M:S, y-m-d, y-m, H:M:S, H:M`;
+                result = `日期格式'${format}'不正确,支持的格式:y-m-d, y-m, y-m-d H:M:S`;
                 break;
         }
         return result;
@@ -124,5 +199,53 @@ const Utils = {
         let random = Math.random() * (m - n) + n;
         return random.toFixed(0);
     },
+
+    //时间戳转换为时间(Calendar.vue)
+    timeToken(token: any){
+        let date = new Date(token);
+        let H: string | number = date.getHours();
+        let M: string | number = date.getMinutes();
+        let S: string | number = date.getSeconds();
+        H = H<10 ? `0${H}` : H;
+        M = M<10 ? `0${M}` : M;
+        S = S<10 ? `0${S}` : S;
+        return `${H}:${M}:${S}`;
+    },
+
+    /**
+     * 这个方法接受一个形如"YYYY-MM-DDTHH:mm:ss"格式的字符串作为预设时间,
+     * 返回一个布尔值,表示当前时间和预设时间之间的差值是否小于10分钟。
+     * 具体实现中,我们首先获取当前时间和预设时间的时间戳,然后计算它们之间的时间差,
+     * 最后判断时间差是否小于10分钟(单位为毫秒)。
+     * @param presetTime 
+     * @returns 
+     */
+    isWithin10Minutes(presetTime: any) {
+        // 获取当前时间和预设时间的时间戳(单位:毫秒)
+        const currentTime = Date.now();
+        const presetTimeMillis = new Date(presetTime).getTime();
+      
+        // 计算时间差(单位:毫秒)
+        const timeDiff = Math.abs(currentTime - presetTimeMillis);
+      
+        // 判断时间差是否小于10分钟(单位:毫秒)
+        return timeDiff < 10 * 60 * 1000;
+    },
+
+    // 语音播报的函数
+    handleSpeak(text: string){
+        msg.text = text; // 文字内容: 小朋友,你是否有很多问号
+        msg.lang = "zh-CN"; // 使用的语言:中文
+        msg.volume = 1; // 声音音量:1
+        msg.rate = 1; // 语速:1
+        msg.pitch = 1; // 音高:1
+        synth.speak(msg); // 播放
+    },
+    // 语音停止
+    handleStop(e: any){
+        msg.text = e;
+        msg.lang = "zh-CN";
+        synth.cancel(msg);
+    },
 }
 export default Utils;