mar*_*ark 11 javascript date date-format
我想使用特定的时区,语言环境和显示选项来打印代表日期的字符串。
我应该使用哪一个?
看来他们返回相同的结果。
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"Run Code Online (Sandbox Code Playgroud)
这几乎是偏离主题的观点,但是无论如何这里都是如此。
我应该使用哪一个?
Date.prototype.toLocaleString最初仅依赖于实现,并且在浏览器之间变化很大。当添加了对Intl对象的支持(ECMAScript 2015,第6版)时,toLocaleString被允许支持相同的选项。尽管ECMA-262并没有要求支持,但可能所有当前的实现都支持它。
请注意,这并未消除允许的实现差异,它只是提供了一些基于语言,地区和方言的格式设置选项(以及基于IANA时区数据库标识符和值的时区选项)。
Intl对象(以及toLocaleString)基于ECMA-402,它没有严格指定格式,因此实现方式仍有一些差异。最大的区别在于时区名称(没有标准)和逗号,空格等的位置。
但是,出于大多数实际目的,无论您使用Intl对象还是toLocaleString都由您自己决定,我认为没有任何技术上的原因要优先于另一个。虽然对于一个特定的实现来说,两者的结果应该是相同的,但是不要期望结果的字符串在各个实现之间是完全相同的,或者不要针对给定的BCP 47语言标记遵循特定的格式。
如果多次重复使用相同的格式,Intl.DateTimeFormat从性能角度来看,重复使用对象似乎更好。
const format = {
weekday: 'long',
month: 'long',
day: '2-digit',
};
const dateTimeFormat = new Intl.DateTimeFormat('en', format);
const start1 = performance.now();
for (let i = 0; i < 10000; i++) dateTimeFormat.format(new Date());
console.log('re-use Intl.DateTimeFormat', performance.now() - start1);
const start2 = performance.now();
for (let i = 0; i < 10000; i++) new Date().toLocaleString('en', format);
console.log('use toLocaleString', performance.now() - start2);Run Code Online (Sandbox Code Playgroud)
当我在 Chrome 105 中运行此代码片段时,它会给出如下结果:
re-use Intl.DateTimeFormat 17.299999952316284
use toLocaleString 876.0999999046326
Run Code Online (Sandbox Code Playgroud)
除了其他人发布的要点之外,我还看到了默认格式(选项)的不同之处:
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"Run Code Online (Sandbox Code Playgroud)
在 Chrome v72 - v85 / Node v14 上测试。
| 归档时间: |
|
| 查看次数: |
5915 次 |
| 最近记录: |