如何使用Intl.DateTimeFormat API设置毫秒格式

时间:2018-11-26 08:45:34

标签: javascript localization

我需要在特定语言环境(不是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()的结果。

1 个答案:

答案 0 :(得分:1)

现在已在 Chrome 和 Firefox 中进行了规范和实现:

https://github.com/tc39/ecma402/issues/300

https://caniuse.com/mdn-javascript_builtins_intl_datetimeformat_datetimeformat_fractionalseconddigits

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"