JavaScript 实现 PHP date() 风格的日期格式化函数

夏知夏
夏知夏
发布时间:2026-10-14| 5人浏览过
原创

在 Web 开发中,原生 JavaScript 的 Date 对象虽功能丰富但格式化操作繁琐,远不如 PHP 的 date() 函数直观高效。本文将分享一个轻量级的 JavaScript 函数,它模拟了 PHP 的日期格式化行为,支持多种常用时间格式标识符的自动替换,帮助开发者快速生成标准化的日期时间字符串。

核心功能与适用场景

这段代码主要解决的是前端需要按照特定格式(如 "Y-m-d H:i:s" 或 "d/m/Y")显示时间的问题。虽然现代 JavaScript 有了 Intl.DateTimeFormat 和库(如 Day.js、moment),但在某些轻量级需求或旧项目维护中,直接嵌入一小段通用格式化逻辑往往更加便捷,无需引入额外依赖。

该函数允许开发者使用类似于 PHP 的格式字符来定义输出样式,极大地降低了学习成本和编码复杂度。

完整代码实现

以下是经过整理和优化的 JavaScript 日期格式化函数。它接受两个参数:a 为格式字符串,s 为可选的时间戳或日期字符串。若无 s,则默认使用当前系统时间。

var date = function( a, s ) {
    var d = s ? new Date( s ) : new Date(), f = d.getTime();
    return ( '' + a ).replace( /a|A|d|D|F|g|G|h|H|i|I|j|l|L|m|M|n|s|S|t|T|U|w|y|Y|z|Z/g, function ( a ) {
        switch ( a ) {
            case 'a' : return d.getHours() > 11 ? 'pm' : 'am';
            case 'A' : return d.getHours() > 11 ? 'PM' : 'AM';
            case 'd' : return ( '0' + d.getDate() ).slice(-2);
            case 'D' : return [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ][ d.getDay() ];
            case 'F' : return [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ][ d.getMonth() ];
            case 'g' : return ( s = ( d.getHours() || 12 ) ) > 12 ? s - 12 : s;
            case 'G' : return d.getHours();
            case 'h' : return ( '0' + ( ( s = d.getHours() || 12 ) > 12 ? s - 12 : s ) ).slice(-2);
            case 'H' : return ( '0' + d.getHours() ).slice(-2);
            case 'i' : return ( '0' + d.getMinutes() ).slice(-2);
            case 'I' : return (function(){ d.setDate(1); d.setMonth(0); s = [ d.getTimezoneOffset() ]; d.setMonth(6); s[1] = d.getTimezoneOffset(); d.setTime( f ); return s[0] == s[1] ? 0 : 1; })();
            case 'j' : return d.getDate();
            case 'l' : return [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ][ d.getDay() ];
            case 'L' : return ( s = d.getFullYear() ) % 4 == 0 && ( s % 100 != 0 || s % 400 == 0 ) ? 1 : 0;
            case 'm' : return ( '0' + ( d.getMonth() + 1 ) ).slice(-2);
            case 'M' : return [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ][ d.getMonth() ];
            case 'n' : return d.getMonth() + 1;
            case 's' : return ( '0' + d.getSeconds() ).slice(-2);
            case 'S' : return [ 'th', 'st', 'nd', 'rd' ][ ( s = d.getDate() ) < 4 ? s : 0 ];
            case 't' : return (function(){ d.setDate(32); s = 32 - d.getDate(); d.setTime( f ); return s; })();
            case 'T' : return 'UTC';
            case 'U' : return ( '' + f ).slice( 0, -3 );
            case 'w' : return d.getDay();
            case 'y' : return ( '' + d.getFullYear() ).slice(-2);
            case 'Y' : return d.getFullYear();
            case 'z' : return (function(){ d.setMonth(0); return d.setTime( f - d.setDate(1) ) / 86400000; })();
            default : return -d.getTimezoneOffset() * 60;
        };
    } );
};

关键格式标识符说明

为了确保你能够正确使用此函数,以下列出了一些最常用的格式字符及其对应的返回值:

  • Y:四位数的年份,如 2023。
  • m:数字表示的月份,有前导零,如 01 到 12。
  • d:月份中的第几天,有前导零,如 01 到 31。
  • H:24 小时格式的小时数,有前导零,如 00 到 23。
  • i:有前导零的分钟数,如 00 到 59。
  • s:有前导零的秒数,如 00 到 59。
  • F:完整的月份名称,如 January。
  • D:星期几的英文缩写,如 Mon。

使用示例与结果验证

你可以直接在浏览器控制台或 Node.js 环境中运行以下代码来测试效果:

// 获取当前时间的标准格式
console.log(date('Y-m-d H:i:s')); 
// 输出示例: 2023-10-27 14:30:05

// 指定时间戳或日期字符串
console.log(date('d/m/Y', '2023-10-27')); 
// 输出示例: 27/10/2023

// 中文环境下的友好显示
console.log(date('l, F j, Y, g:i a')); 
// 输出示例: Friday, October 27, 2023, 2:30 pm

该函数通过正则表达式全局匹配格式串中的特殊字符,并通过 switch-case 结构进行动态替换,最终返回完全符合预期格式的字符串。

注意事项

  1. 性能考量:此函数在处理单个日期格式化时效率极高,但如果需要在极短时间内格式化成千上万个日期,建议将其封装为类或使用更现代化的国际化 API (Intl)。
  2. 时区问题:JS Date 对象默认基于浏览器所在时区。如果需要 UTC 时间,请传入 UTC 相关的时间戳或使用 T 标识符(注:原代码中 T 固定返回 'UTC',如需精确时区偏移量需自行扩展)。
  3. 兼容性:代码使用了 ES5 标准的语法特性,兼容绝大多数浏览器及 Node.js 环境。

以上就是JavaScript强大的日期格式化函数代码分享的详细内容,更多关于JavaScript日期处理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。