如何在 JavaScript 中格式化日期?

2022-08-29 21:47:21

如何将对象格式化为字符串?Date


答案 1

如果与当前接受的答案相比,您需要对格式的控制略少,则可以使用 Date#toLocaleDateString 来创建特定于区域设置的标准呈现。和 参数允许应用程序指定应使用其格式约定的语言,并允许对呈现进行某些自定义。localeoptions

选项关键示例:

  1. day:
    表示日期。
    可能的值为“数字”,“2位数字”。
  2. 工作日:
    工作日的表示形式。
    可能的值为“窄”,“短”,“多”。
  3. 年份:
    年份的表示形式。
    可能的值为“数字”,“2位数字”。
  4. 月:
    月的表示形式。
    可能的值为“数字”,“2位”,“窄”,“短”,“长”。
  5. 小时:
    小时的表示形式。
    可能的值为“数字”,“2位数字”。
  6. 分钟:分钟的表示形式。
    可能的值为“数字”,“2位数字”。
  7. 第二:
    第二个的表示。
    可能的值为“数字”,2位数字”。

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

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

对于不同的语言:

  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

引用:


答案 2

对于自定义分隔的日期格式,必须从 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 逐个提取出部分,但请注意,使用此方法时,截至 2020 年 3 月,ECMAScript 实现中存在一个错误,当涉及到在分钟和秒上前导零时(上述方法可以规避此错误)。DateTimeFormat

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

在处理日期和时间时,通常值得使用库(例如。时刻.jsluxon),因为该领域有许多隐藏的复杂性。

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