如果您设置,这将起作用hour12
财产给false. i.e.
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浏览器。
当我检查规格时,它定义了一个算法 http://www.ecma-international.org/ecma-402/1.0/#FormatDateTime可以用来实现Intl.DateTimeFormat
功能。我看到当 hour12 属性设置为 true 时,处理了许多特殊情况,最后一步之一是
- If dateTimeFormat has an internal property [[hour12]] whose value is
true, then
- 如果 pm 为真,则令 fv 为实现和区域设置
表示“post meridiem”的相关字符串值;否则令 fv 为
与实现和语言环境相关的表示“ante”的字符串值
子午线”。
- 替换结果中由“{ampm}”组成的子字符串,
与 fv。
所以我认为,Intl.DateTimeFormat
最初使用日期对象,稍后在步骤(8)中,它应用此步骤来放置上午/下午信息。
在此步骤中,可能会2-digits
中指定的信息Intl.DateTimeFormat
不考虑,但必须考虑。我认为这是一个有效的bug https://code.google.com/p/chromium/issues/detail?id=527926并且它已经被提出了https://code.google.com/p/chromium/issues/detail?id=527926 https://code.google.com/p/chromium/issues/detail?id=527926.
PS:我并不是说问题出在规范中,如 ECMAScript 语言规范中所述,
算法是
用于精确指定 ECMAScript 所需的语义
构造,但无意暗示使用任何特定的
实施技术。