【前端】JS耗时计算/时间转换/日期/本周/本月/格式化
一、效果
二、代码
/** * 格式化时间 * @param {*} fmt 如 'yyyy-MM-dd HH:mm:ss' * @param {*} date Date类型 */ const format = (fmt, date) => { var ret; var opt = { "y+": date.getFullYear().toString(), // 年 "M+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "m+": date.getMinutes().toString(), // 分 "s+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (var k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } /** * 计算耗时 * @param {*} timeNumber 如:338558(单位:ms) * 返回:00:05:38,558 */ const calcTime = (timeNumber) => { var hUnit = 60 * 60 * 1000; var mUnit = 60 * 1000; var sUnit = 1000; var h = Math.trunc(timeNumber / hUnit); var m = Math.trunc((timeNumber % hUnit) / mUnit); var s = Math.trunc(((timeNumber % hUnit) % mUnit) / sUnit); var ms = Math.trunc(((timeNumber % hUnit) % mUnit) % sUnit); var calcResult = `${(Array(2).join(0) + h).slice(-2)}:${(Array(2).join(0) + m).slice(-2)}:${(Array(2).join(0) + s).slice(-2)},${(Array(3).join(0) + ms).slice(-3)}`; return calcResult } /** * 获取时间 * @param {*} count 0-当前时间; <0-前N天; >0-后N天 * 返回如:2022-10-20 14:01:42 */ const getDate = (count) => { const fmt = 'yyyy-MM-dd HH:mm:ss' let newDate = null if (count === 0) { newDate = format(fmt, new Date()) } else { newDate = format(fmt, new Date(new Date().getTime() + count * 24 * 3600 * 1000)) } return newDate } /** * 获得本周的开始与结束日期 * 返回如:[ "2022-10-24 00:00:00", "2022-10-30 00:00:00" ] */ const getNowWeekDate = () => { let data = new Date() //当前日期 let year = Number(data.getFullYear());//当前年 let month = Number(data.getMonth()) + 1; let nowMonth = Number(data.getMonth()); //当前月 let day = Number(data.getDate()); //当天 //计算某日是本月第几周 let mydate = new Date(year, month - 1, day); let weekday = mydate.getDay(); //获取该日是星期几,0代表星期日//今天本周的第几天 let weekno = Math.ceil((day + 6 - weekday) / 7); // 本月第几周 let weekStartDate = new Date(year, nowMonth, day + 1 - weekday); let weekEndDate = new Date(year, nowMonth, day + 7 - weekday); return [format('yyyy-MM-dd HH:mm:ss', weekStartDate), format('yyyy-MM-dd HH:mm:ss', weekEndDate)]; } /** * 获得本月的开始与结束日期 * 返回如:[ "2022-10-01 14:01:42", "2022-10-31 00:00:00" ] */ const getNowMonthDate = () => { // 获取当前月的第一天 var start = new Date(); start.setDate(1); // 获取当前月的最后一天 var date = new Date(); var currentMonth = date.getMonth(); var nextMonth = ++currentMonth; var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1); var oneDay = 1000 * 60 * 60 * 24; var end = new Date(nextMonthFirstDay - oneDay); return [format('yyyy-MM-dd HH:mm:ss', start), format('yyyy-MM-dd HH:mm:ss', end)] }
三、完整代码

<!-- --> <template> <div class='content'> <div><span>当前时间:</span>{{ getDate(0) }}</div> <div><span>前4天日期:</span>{{ getDate(-4) }}</div> <div><span>后3天日期:</span>{{ getDate(3) }}</div> <div><span>本周起始日期:</span>{{ getNowWeekDate() }}</div> <div><span>本月起始日期:</span>{{ getNowMonthDate() }}</div> <div><span>338558ms:</span>{{ calcTime(338558) }}</div> </div> </template> <script setup> /** * 格式化时间 * @param {*} fmt 如 'yyyy-MM-dd HH:mm:ss' * @param {*} date Date类型 */ const format = (fmt, date) => { var ret; var opt = { "y+": date.getFullYear().toString(), // 年 "M+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "m+": date.getMinutes().toString(), // 分 "s+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (var k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } /** * 计算耗时 * @param {*} timeNumber 如:338558(单位:ms) * 返回:00:05:38,558 */ const calcTime = (timeNumber) => { var hUnit = 60 * 60 * 1000; var mUnit = 60 * 1000; var sUnit = 1000; var h = Math.trunc(timeNumber / hUnit); var m = Math.trunc((timeNumber % hUnit) / mUnit); var s = Math.trunc(((timeNumber % hUnit) % mUnit) / sUnit); var ms = Math.trunc(((timeNumber % hUnit) % mUnit) % sUnit); var calcResult = `${(Array(2).join(0) + h).slice(-2)}:${(Array(2).join(0) + m).slice(-2)}:${(Array(2).join(0) + s).slice(-2)},${(Array(3).join(0) + ms).slice(-3)}`; return calcResult } /** * 获取时间 * @param {*} count 0-当前时间; <0-前N天; >0-后N天 * 返回如:2022-10-20 14:01:42 */ const getDate = (count) => { const fmt = 'yyyy-MM-dd HH:mm:ss' let newDate = null if (count === 0) { newDate = format(fmt, new Date()) } else { newDate = format(fmt, new Date(new Date().getTime() + count * 24 * 3600 * 1000)) } return newDate } /** * 获得本周的开始与结束日期 * 返回如:[ "2022-10-24 00:00:00", "2022-10-30 00:00:00" ] */ const getNowWeekDate = () => { let data = new Date() //当前日期 let year = Number(data.getFullYear());//当前年 let month = Number(data.getMonth()) + 1; let nowMonth = Number(data.getMonth()); //当前月 let day = Number(data.getDate()); //当天 //计算某日是本月第几周 let mydate = new Date(year, month - 1, day); let weekday = mydate.getDay(); //获取该日是星期几,0代表星期日//今天本周的第几天 let weekno = Math.ceil((day + 6 - weekday) / 7); // 本月第几周 let weekStartDate = new Date(year, nowMonth, day + 1 - weekday); let weekEndDate = new Date(year, nowMonth, day + 7 - weekday); return [format('yyyy-MM-dd HH:mm:ss', weekStartDate), format('yyyy-MM-dd HH:mm:ss', weekEndDate)]; } /** * 获得本月的开始与结束日期 * 返回如:[ "2022-10-01 14:01:42", "2022-10-31 00:00:00" ] */ const getNowMonthDate = () => { // 获取当前月的第一天 var start = new Date(); start.setDate(1); // 获取当前月的最后一天 var date = new Date(); var currentMonth = date.getMonth(); var nextMonth = ++currentMonth; var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1); var oneDay = 1000 * 60 * 60 * 24; var end = new Date(nextMonthFirstDay - oneDay); return [format('yyyy-MM-dd HH:mm:ss', start), format('yyyy-MM-dd HH:mm:ss', end)] } </script> <style lang="less" scoped> span { display: inline-block; text-align: right; width: 300px; } div { margin: 10px 0px; } </style>
如果忍耐算是坚强 我选择抵抗 如果妥协算是努力 我选择争取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?