//格式化时间戳 export function formatDeadline(timestamp) { const date = new Date(timestamp * 1000); // 时间戳以秒为单位,需要乘以1000转换成毫秒 const year = date.getFullYear(); const month = ("0" + (date.getMonth() + 1)).slice(-2); const day = ("0" + date.getDate()).slice(-2); const hours = ("0" + date.getHours()).slice(-2); const minutes = ("0" + date.getMinutes()).slice(-2); const seconds = ("0" + date.getSeconds()).slice(-2); return `${year}年${month}月${day}日 ${hours}:${minutes}:${seconds}`; } export function formatTimestamp(timestamp) { const now = new Date(); const date = new Date(timestamp * 1000); // 检查是否是今天 if (now.toDateString() === date.toDateString()) { return date.toLocaleTimeString(undefined, { hour: "numeric", minute: "numeric", }); } // 获取昨天的日期 const yesterday = new Date(now); yesterday.setDate(now.getDate() - 1); // 检查是否是昨天 if (yesterday.toDateString() === date.toDateString()) { return `昨天 ${date.getHours()}:${String(date.getMinutes()).padStart( 2, "0" )}`; } // 检查是否是今年 if (now.getFullYear() === date.getFullYear()) { return `${ date.getMonth() + 1 }-${date.getDate()} ${date.getHours()}:${String(date.getMinutes()).padStart( 2, "0" )}`; } // 不是今年,返回完整日期和时间 return `${date.getFullYear()}-${ date.getMonth() + 1 }-${date.getDate()} ${date.getHours()}:${String(date.getMinutes()).padStart( 2, "0" )}`; } // 防抖函数 export function debounce(fn, delay) { let timer = null; return (fnn) => { //清除上一次的延时器 if (timer) { clearTimeout(timer); // return; // console.log(timer); } //重新设置新的延时器 timer = setTimeout(() => { //修改this指向问题 // fn.apply(this,value) fn(fnn); }, delay); }; } export function utf8Length(str) { let length = 0; for (let i = 0; i < str.length; i++) { const code = str.charCodeAt(i); if (code < 0x80) { // 0xxxxxxx length += 0.5; } else if (code < 0x800) { // 110xxxxx 10xxxxxx length += 2; } else if (code < 0x10000) { // 1110xxxx 10xxxxxx 10xxxxxx length += 1; } else if (code <= 0x10ffff) { // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx length += 4; } } return length; } export function getVideoBase64(url) { return new Promise((resolve, reject) => { // 创建 video 元素 const video = document.createElement("video"); // 设置跨域属性 video.crossOrigin = "anonymous"; // 设置视频 URL video.src = url; // 设置视频画面宽度 video.width = "90"; // 设置视频画面高度 video.height = "90"; // 设置视频播放位置为第一帧 video.currentTime = 1; // 设置预加载方式为自动加载 video.preload = "auto"; // 创建 canvas 元素 const canvas = document.createElement("canvas"); // 将 canvas 的宽度和高度设置为视频画面的宽度和高度 canvas.width = video.width; canvas.height = video.height; // 判断是否为 iOS 系统 if (/(iPad|iPhone|iPod)/gi.test(navigator.userAgent)) { // 在 iOS 系统中,需要手动触发视频加载,然后设置自动播放和静音属性 video.load(); // video.autoplay = true; // 在 iOS 系统中,监听 loadedmetadata 事件可以保证视频数据已经全部加载完毕 } video.muted = true; video.addEventListener("loadeddata", function () { setTimeout(function () { console.log("监听到了listen:", "loadeddata"); canvas .getContext("2d") .drawImage(video, 0, 0, canvas.width, canvas.height); //绘制canvas const dataURL = canvas.toDataURL("image/jpeg"); //转换为base64 video.setAttribute("poster", dataURL); console.log(dataURL, "dataURL"); resolve(dataURL); // 清除内存 canvas.remove(); video.remove(); }, 100); }); // 监听视频事件,在发生错误时 Promise 会 reject video.addEventListener("error", function () { reject(new Error("视频加载错误")); // 清除内存 canvas.remove(); video.remove(); }); }); }