JavaScript 原生日期格式化扩展方案

叶初
叶初
发布时间:2026-10-14 | 2人浏览过
原创

在 Web 开发中,原生 JavaScript 的 Date 对象缺乏统一的中文或自定义格式输出能力。本文将分享一种通过扩展 prototype 实现轻量级日期格式化函数的方法,通过正则表达式灵活处理年月日与时分秒的组合。

实现原理与核心代码

通过在 Date 对象的 prototype 属性上定义 Format 函数,使得所有新建的 Date 实例都可以直接调用该方法。其核心逻辑是利用正则表达式匹配常见的占位符(如 yyyy, MM, HH 等),并将其替换为当前时间的对应数值部分。

复制代码代码如下:
// 日期时间原型增加格式化方法
Date.prototype.Format = function (formatStr) {
    var str = formatStr;
    // 获取星期数组,0代表星期日
    var Week = ['日', '一', '二', '三', '四', '五', '六'];

    // 替换年份:YYYY/YYYY 替换为四位年份,yy/YY 替换为两位年份
    str = str.replace(/yyyy|YYYY/, this.getFullYear());
    var yy = this.getYear() % 100;
    str = str.replace(/yy|YY/, (yy > 9 ? yy.toString() : '0' + yy));

    var month = this.getMonth() + 1;
    // 替换月份:MM 替换为补零两位,M 替换为不补零
    str = str.replace(/MM/, month > 9 ? month.toString() : '0' + month);
    str = str.replace(/M/g, month);

    // 替换星期:w/W 替换为中文星期几
    str = str.replace(/w|W/g, Week[this.getDay()]);

    // 替换日期:DD 替换为补零两位,D 替换为不补零
    str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
    str = str.replace(/d|D/g, this.getDate());

    // 替换小时:HH 替换为补零两位,H 替换为不补零
    str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
    str = str.replace(/h|H/g, this.getHours());

    // 替换分钟:mm 替换为补零两位,m 替换为不补零
    str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
    str = str.replace(/m/g, this.getMinutes());

    // 替换秒钟:SS 替换为补零两位,S 替换为不补零
    str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
    str = str.replace(/s|S/g, this.getSeconds());

    return str;
};

使用方法演示

完成原型扩展后,创建一个 Date 对象并调用 Format 方法即可获取指定格式的字符串。参数 formatStr 支持任意组合,常用的分隔符包括连字符、空格和斜杠等。

复制代码代码如下:
// 创建当前时间实例
var d = new Date();

// 格式化为“年-月-日 时:分:秒”
var str = d.Format("yyyy-MM-dd  hh:mm:ss");
console.log(str); // 例如输出: 2023-10-27  14:30:05

// 尝试其他格式
var weekStr = d.Format("今天是 yyyy年 MM月 dd日 W");
console.log(weekStr); // 例如输出: 今天是 2023年 10月 27日 星期五

注意事项

  • 兼容性: 该代码依赖标准的 Date API,在所有现代浏览器及 Node.js 环境中均可正常运行。
  • 全局污染: 修改原型链属于全局行为,若项目引入了大型 UI 框架或第三方库,可能会产生命名冲突。建议在独立的作用域内使用,或检查现有环境是否已存在同名方法。
  • 正则替换顺序: 代码中先替换两位模式(如 MM)再替换一位模式(如 M)是为了防止部分匹配导致的错误,这是正则替换的一个关键细节。

以上就是 JavaScript 原生日期格式化扩展方案的详细内容,更多关于 JavaScript 时间处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表