我需要在特定语言环境(不是utc,不是浏览器语言环境)中格式化时间戳。但是我也必须将日期的毫秒部分。我的第一次尝试是使用second:'numeric'
API的DateTimeFormat
:
new Intl.DateTimeFormat(
'de-de', // german as an example, user selectable
{
year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric',
second: 'numeric',
hour12: false
}
)
.format(new Date()); // Date as an example
但是结果类似于"26.11.2018, 09:31:04"
,而不是"26.11.2018, 09:31:04,243"
。
是否有比使用formatToParts()
并检测丢失的毫秒数并与Intl.NumberFormat
重新添加更容易的可能性?
注意:如果有人需要实现此目的,则Microsoft浏览器正在将“从左至右标记Unicode字符”添加到输出中。因此,如果不进行消毒,就无法parseInt
formatToParts()
的结果。
答案 0 :(得分:1)
现在已在 Chrome 和 Firefox 中进行了规范和实现:
https://github.com/tc39/ecma402/issues/300
new Date().toLocaleString('de-de', { year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3
}
)
// or
new Intl.DateTimeFormat(
'de-de', // german as an example, user selectable
{
year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric',
second: 'numeric', fractionalSecondDigits: 3,
hour12: false
}
)
.format(new Date());
// => "6.1.2021, 12:30:52,719"