我应该如何在JavaScript中格式化日期?

29 浏览
0 Comments

我应该如何在JavaScript中格式化日期?

我该如何把一个Date对象格式化为一个字符串?

admin 更改状态以发布 2023年5月23日
0
0 Comments

对于自定义分隔日期格式,您需要从一个DateTimeFormat对象(这是ECMAScript国际化API的一部分)中提取日期(或时间)组件,然后手动创建带有所需分隔符的字符串。

为了实现这一点,您可以使用DateTimeFormat#formatToParts。您可以解构数组,但这并不理想,因为数组输出取决于地区设置:

{ // 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);
}

更好的办法是将格式数组映射到结果字符串:

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);

您也可以使用DateTimeFormat#format逐个提取DateTimeFormat部分,但请注意,当使用此方法时,截至2020年3月,ECMAScript实现中存在一个bug,涉及分钟和秒钟的前导零(此问题通过上面的方法来解决)。

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}`);

在处理日期和时间时,通常值得使用一个库(例如luxondate-fnsmoment.js不推荐用于新项目),因为该领域存在许多隐藏的复杂性。

请注意,上述解决方案中使用的ECMAScript国际化API不受IE10支持(2020年2月全球浏览器市场份额为0.03%)。

0
0 Comments

如果你需要比当前接受的答案更少的控制格式,可以使用Date#toLocaleDateString来创建标准的区域设置特定的渲染。 localeoptions参数允许应用程序指定应使用哪种语言的格式约定,并允许对呈现进行一些自定义。

选项键示例:

  1. day:
    一天的表示形式。
    可能的值是“数字”,“2位数”。
  2. weekday:
    星期几的表示形式。
    可能的值是“狭窄的”,“短的”,“长的”。
  3. year:
    年份的表示形式。
    可能的值是“数字”,“2位数”。
  4. month:
    月份的表示形式。
    可能的值是“数字”,“2位数”,“狭窄的”,“短的”,“长的”。
  5. hour:
    小时的表示形式。
    可能的值是“数字”,“2位数”。
  6. minute:
    分钟的表示形式。
    可能的值是“数字”,“2位数”。
  7. second:
    秒的表示形式。
    可能的值是“数字”,“2位数”。

所有这些键都是可选的。您可以根据自己的需求更改选项值的数量,这也将反映每个日期时间术语的存在。

注意:如果您只想配置内容选项,但仍然使用当前区域设置,将第一个参数传递null会导致错误。请改用undefined

不同语言对应的选项:

  1. "en-US": 美式英语
  2. "en-GB": 英式英语
  3. "hi-IN": 印地语
  4. "ja-JP": 日语

你还可以使用更多的语言选项。

例如

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();
console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

你还可以使用 toLocaleString() 方法达到同样的效果。不同之处在于当你不传递任何选项时,此函数提供时间信息。

// Example
9/17/2016, 1:21:34 PM

参考:

0