回答

收藏

如何格式化 JavaScript 日期

技术问答 技术问答 264 人阅读 | 0 人回复 | 2023-09-12

在 JavaScript 如何将格式化日期对象打印成10-Aug-2010?6 x: E& U, s) E$ K* I
                                                               
% s% V% R0 u" F9 p8 M    解决方案:                                                               
% s' Y1 Q( e9 C2 M+ v- l                                                                对于自定义分隔的日期格式,您必须从DateTimeFormat对象(这是 ECMAScript 国际化 API提取日期(或时间)组件,然后手动创建带有所需分隔符的字符串。  n- B% ^, ]) w$ F, i; c
为此,您可以使用它DateTimeFormat#formatToParts.由于数组输出取决于语言环境:
- \/ f  r/ U' z( G% e' d7 j2 ~
    { // example 1   let f = new Intl.DateTimeFormat('en   let a = f.formatToParts();   console.log(a);}{ // example 2   let f = new Intl.DateTimeFormat('hi   let a = f.formatToParts();   console.log(a);}" V7 x2 E8 j/ U: y& k0 b* ]
最好将格式数组映射到结果字符串:* i: q( n: X8 V; ?7 H/ |
    function join(t,a,s) {   function format(m) {       let f = new Intl.DateTimeFormat('en',m);      return f.format(t);      return a.map(format).join(s);}let a = [{day: 'numeric'},{month: 'short'},{year: 'numeric'}];let s = join(new Date,a,'-');console.log(s);7 ]% p4 O; M9 e5 R
DateTimeFormat也可以用 一个一个拉出部分DateTimeFormat#format,但请注意,截至2020年 3 月,ECMAScript 实现中存在一个错误,即分钟和秒的前导零(上述方法避免了这个错误)。
2 E# i( \+ t* M6 v" @, x  C3 O7 r
    let d = new Date(2010,7,5);let ye = new Intl.DateTimeFormat('en',{ year: 'numeric' }).format(d);let mo = new Intl.DateTimeFormat('en',{ month: 'short' }).format(d);let da = new Intl.DateTimeFormat('en',{ day: '2-digit' }).format(d);console.log(`${da}-${mo}-${ye}`);
    ( K; @: ]8 M& b& {5 M1 m) T3 I5 u
通常值得使用库(如 moment.js、luxon),因为这个领域有很多隐藏的复杂性。
3 q* J2 ]$ e0 E: I+ v" {请注意,IE 10不支持上述解决方案中使用的 ECMAScript 国际化 API (2020年 2 月全球浏览器市场份额0.03% )。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则