动态格式化时间

需求

很多时候我们都需要对时间进行格式化的处理,不同的模块可能需要不同的时间格式甚至是不同的时间长度。

我认为最合理的处理时间的方式是在存储的时候存储时间戳,这样方便今后转换为任何时间格式,然后我简单封装了一个时间格式的处理方法,支持我们获取任意长度,任意格式的时间

格式时间

  • 年: YYYY
  • 月: M/MM (双字符长度代表自动补0)
  • 日: D/DD
  • 时: h/hh
  • 分: m/mm
  • 秒: s/ss
  • 季度: Q 我们可以采取任何时间场地或任何形式进行拼接,例如:YYYY-MM-DD hh-mm-ss或者YYYY年MM月,该方法会自动识别其中的时间字段进行替换,从而保留其他拼接字符,注意不要使用代表时间格式的字符进行接
js 复制代码
const formatDate = (
    dateTemplate = "YYYY-MM-DD hh:mm:ss",
    date = new Date()
    ) => {
    try {
      // 处理日期输入,转换为Date对象
      let targetDate;
      if (date instanceof Date) {
        targetDate = date;
      } else {
        targetDate = new Date(date);
      }

      // 检查日期有效性
      if (isNaN(targetDate.getTime())) {
        throw new Error("您传入的不是有效的日期格式!");
      }

      // 提取日期组件
      const year = targetDate.getFullYear();
      const month = targetDate.getMonth() + 1;
      const dateNum = targetDate.getDate();
      const hours = targetDate.getHours();
      const minutes = targetDate.getMinutes();
      const seconds = targetDate.getSeconds();
      const quarter = Math.floor(month / 3) + 1;

      // 定义替换规则映射表
      const replacements = {
        YYYY: year,
        MM: String(month).padStart(2, "0"),
        M: month,
        DD: String(dateNum).padStart(2, "0"),
        D: dateNum,
        hh: String(hours).padStart(2, "0"),
        h: hours,
        mm: String(minutes).padStart(2, "0"),
        m: minutes,
        ss: String(seconds).padStart(2, "0"),
        s: seconds,
        Q: quarter, // 新增季度支持
      };

      // 执行替换
      return Object.entries(replacements).reduce((str, [key, value]) => {
        return str.replace(new RegExp(key, "g"), value);
      }, dateTemplate);
    } catch (error) {
      console.error("日期格式化错误:", error.message);
      return null; // 明确返回null表示格式化失败
    }
};
相关推荐
樱花开了几轉32 分钟前
React中为甚么强调props的不可变性
前端·javascript·react.js
Mr...Gan1 小时前
VUE3(四)、组件通信
前端·javascript·vue.js
楚轩努力变强3 小时前
前端工程化常见问题总结
开发语言·前端·javascript·vue.js·visual studio code
前端开发爱好者4 小时前
只有 7 KB!前端圈疯传的 Vue3 转场动效神库!效果炸裂!
前端·javascript·vue.js
Fly-ping4 小时前
【前端】JavaScript文件压缩指南
开发语言·前端·javascript
接口写好了吗4 小时前
【el-table滚动事件】el-table表格滚动时,获取可视窗口内的行数据
javascript·vue.js·elementui·可视窗口滚动
未来之窗软件服务5 小时前
免费版酒店押金原路退回系统之【房费押金计算器】实践——仙盟创梦IDE
前端·javascript·css·仙盟创梦ide·东方仙盟·酒店押金系统
云边散步6 小时前
《校园生活平台从 0 到 1 的搭建》第四篇:微信授权登录前端
前端·javascript·后端
讨厌吃蛋黄酥6 小时前
React样式冲突终结者:CSS模块化+Vite全链路实战指南🔥
前端·javascript·react.js
星眠6 小时前
学习低代码编辑器第四天
javascript·面试