Intl.DateTimeFormat('en-US', {
    weekday: 'long',
    year: 'numeric',
    month: 'long',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
}).format(807959700000)

我期望上面的调用返回类似Wednesday, August 09, 1995, 04:15:00 AM的内容,但似乎缺少前导零。我得到Wednesday, August 09, 1995, 4:15:00 AM2-digit不能解决问题,尽管它似乎可以在每月的某天使用。 2-digit是不是意料之外的意思,还是我做错了什么?

P.S.我在Chrome控制台中对此进行了测试。

最佳答案

如果将hour12属性设置为 false ,这将起作用。 IE。

Intl.DateTimeFormat('en-US', {
    weekday: 'long',
    year: 'numeric',
    month: 'long',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false     // setting 24 hour format
}).format(807959700000);

它适用于凌晨2点和下午2点(14小时)。但我知道同样适用于12小时制,但事实并非如此。我在chrome浏览器和firefox浏览器中都进行了检查。

当我检查规范时,它已经定义了一个algorithm,可用于实现Intl.DateTimeFormat功能。我看到在将hour12属性设置为true时处理了许多特殊情况,最后一步是



因此,我认为Intl.DateTimeFormat最初与date对象配合使用,随后在步骤(8)中应用此步骤放置am/pm信息。

在此步骤中,可能不考虑2-digits中指定的Intl.DateTimeFormat信息,但必须为。我认为这是有效的bug,并且已经提高了https://code.google.com/p/chromium/issues/detail?id=527926

PS:我并不是说问题在于规范,如ECMAScript语言规范中所述,

10-04 21:39