如何在 JavaScript 中格式化日期,将 Date 对象格式化为字符串?

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

原文由 leora 发布,翻译遵循 CC BY-SA 4.0 许可协议
阅读 1.2k
2 个回答

对于自定义分隔的日期格式,您必须提取日期(或时间)

DateTimeFormat 对象中的组件(它是

ECMAScript Internationalization 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 的各个部分

DateTimeFormat#format ,但请注意,使用此方法时,截至 3 月

2020 年,ECMAScript 实现中存在 一个错误,涉及

分钟和秒的前导零(这个错误被方法规避了

以上)。

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

在处理日期和时间时,通常值得使用库(例如。

moment.js , luxon ) 因为许多隐藏的复杂性

场地。

请注意,上述解决方案中使用的 ECMAScript 国际化 API

IE10 不支持(2 月全球浏览器市场份额 0.03%

2020)。

原文由 Marko 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您需要的格式控制比当前接受的答案略少, Date#toLocaleDateString 可用于创建标准的特定于语言环境的渲染。 localeoptions 参数让应用程序指定应使用其格式约定的语言,并允许对呈现进行一些自定义。

选项键示例:

  1. 日:

当天的代表。

可能的值为“数字”、“2 位数字”。 2. 工作日:

工作日的表示。

可能的值是“窄”、“短”、“长”。 3. 年:

年的代表。

可能的值为“数字”、“2 位数字”。 4. 月:

月的表示。

可能的值是“数字”、“2 位数字”、“窄”、“短”、“长”。 5. 小时:

小时的表示。

可能的值为“数字”、“2 位数字”。 6. minute:分钟 的表示。

可能的值为“数字”、“2 位数字”。 7. 第二:

第二个代表。

可能的值为“数字”,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

参考:

原文由 ajeet kanojia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题