JavaScript Intl.DateTimeFormat.format 对比 Date.toLocaleString
JavaScript Intl.DateTimeFormat.format vs Date.toLocaleString
我想使用特定时区、区域设置和显示选项打印表示日期的字符串。
我应该使用其中的哪一个?
它们似乎 return 相同的结果。
const event = new Date(1521065710000);
const options = {
day: 'numeric',
month: 'long',
weekday: 'short',
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short',
timeZone: 'America/Los_Angeles',
};
console.log(event.toLocaleString('en-US', options));
// "Wed, March 14, 3:15 PM PDT"
console.log(new Intl.DateTimeFormat('en-US', options).format(event));
// "Wed, March 14, 3:15 PM PDT"
这非常接近于基于观点的离题,但无论如何都可以。
Which one of these should I use?
Date.prototype.toLocaleString 最初完全依赖于实现,并且在浏览器之间变化很大。当添加了对 Intl 对象的支持时(ECMAScript 2015,第 6 版),则允许 toLocaleString 支持相同的选项。虽然 ECMA-262 不强制支持,但可能所有当前的实现都支持它。
请注意,这并没有消除允许的实施可变性,它只是提供了一些基于语言、地区和方言的格式选项(以及基于 IANA time zone database 标识符和值的时区选项)。
Intl 对象(因此 toLocaleString)基于 ECMA-402,它没有严格指定格式,因此在实现上仍有一些差异空间.最大的区别在于时区名称(没有标准)和逗号、空格等的放置。
但是,对于大多数实际用途,您是使用 Intl 对象还是使用 toLocaleString 取决于您,我认为没有任何技术原因可以让您更喜欢其中一个。 .虽然两者的结果对于特定的实现应该是相同的,但不要期望结果字符串在不同的实现中 完全相同 或符合给定的特定格式 BCP 47 language tag.
所有浏览器中的国际化 API isn't supported - 特别是 IE10 及以下版本和 Android 11.8 的 UC 浏览器。如果要支持这些浏览器,请使用 ToLocaleString。 (虽然如果国际化 API 不受支持,什么 ToLocalString returns 是依赖于实现的。)
Intl.DateTimeFormat.prototype.format 专为格式化大量日期而设计 - 无需每次都设置语言环境和选项,只需设置一次并从那时起使用生成的格式函数。
除了其他人发布的积分外,我看到了与默认格式(选项)的区别:
const event = new Date(1521065710000)
//const o = options
console.log(event.toLocaleString('en-US' /*, o*/)) // "3/15/2018, 1:45:10 AM"
console.log(new Intl.DateTimeFormat('en-US' /*, o*/).format(event)) // "3/15/2018"
在 Chrome v72 - v85 / Node v14 上测试。
我想使用特定时区、区域设置和显示选项打印表示日期的字符串。
我应该使用其中的哪一个?
它们似乎 return 相同的结果。
const event = new Date(1521065710000);
const options = {
day: 'numeric',
month: 'long',
weekday: 'short',
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short',
timeZone: 'America/Los_Angeles',
};
console.log(event.toLocaleString('en-US', options));
// "Wed, March 14, 3:15 PM PDT"
console.log(new Intl.DateTimeFormat('en-US', options).format(event));
// "Wed, March 14, 3:15 PM PDT"
这非常接近于基于观点的离题,但无论如何都可以。
Which one of these should I use?
Date.prototype.toLocaleString 最初完全依赖于实现,并且在浏览器之间变化很大。当添加了对 Intl 对象的支持时(ECMAScript 2015,第 6 版),则允许 toLocaleString 支持相同的选项。虽然 ECMA-262 不强制支持,但可能所有当前的实现都支持它。
请注意,这并没有消除允许的实施可变性,它只是提供了一些基于语言、地区和方言的格式选项(以及基于 IANA time zone database 标识符和值的时区选项)。
Intl 对象(因此 toLocaleString)基于 ECMA-402,它没有严格指定格式,因此在实现上仍有一些差异空间.最大的区别在于时区名称(没有标准)和逗号、空格等的放置。
但是,对于大多数实际用途,您是使用 Intl 对象还是使用 toLocaleString 取决于您,我认为没有任何技术原因可以让您更喜欢其中一个。 .虽然两者的结果对于特定的实现应该是相同的,但不要期望结果字符串在不同的实现中 完全相同 或符合给定的特定格式 BCP 47 language tag.
所有浏览器中的国际化 API isn't supported - 特别是 IE10 及以下版本和 Android 11.8 的 UC 浏览器。如果要支持这些浏览器,请使用 ToLocaleString。 (虽然如果国际化 API 不受支持,什么 ToLocalString returns 是依赖于实现的。)
Intl.DateTimeFormat.prototype.format 专为格式化大量日期而设计 - 无需每次都设置语言环境和选项,只需设置一次并从那时起使用生成的格式函数。
除了其他人发布的积分外,我看到了与默认格式(选项)的区别:
const event = new Date(1521065710000)
//const o = options
console.log(event.toLocaleString('en-US' /*, o*/)) // "3/15/2018, 1:45:10 AM"
console.log(new Intl.DateTimeFormat('en-US' /*, o*/).format(event)) // "3/15/2018"
在 Chrome v72 - v85 / Node v14 上测试。