|
@@ -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;
|