使用IntlDateFormatter进行PHP日期格式化


PHP Date Formatting with IntlDateFormatter

我注意到,当使用PHP的IntlDateFormatter格式化日期时,结果可能会因语言而异。示例:

$formatter = new IntlDateFormatter("en_GB",
                        IntlDateFormatter::SHORT, IntlDateFormatter::NONE,
                        "Europe/Vienna");
$date = $formatter->format(0);

在本例中,$date将是31/12/1969,但如果我使用de_de作为区域设置,则$date31.12.69。使用IntlDateFormatter::MEDIUM:时差异较大

  • 德语:31.12.1969
  • 英文:31 Dec 1969

有没有一种方法可以在不指定格式的情况下获得更相似的结果?

正如ICU医生所说:

  1. SHORT是数字,例如12/13/52或下午3:30
  2. MEDIUM较长,例如1952年1月12日
  3. LONG较长,例如1952年1月12日或下午3:30:32
  4. FULL是完全指定的,例如公元1952年4月12日星期二或太平洋标准时间下午3:30:42

因此,你可能对不断出现的问题是正确的:"谁定义这些短/中格式,谁决定它的外观?"。

所有类似的决策都由CLDR确认,其过程描述为:

一旦收到某个国家和语言的数据将比较不同的来源以显示协议和差异。初始数据贡献通常标记为草稿;一旦数据被审查,这一点就可以改变。

请注意,存储库中有两种类型的数据:

  • 通用数据:内容由CLDR技术委员会根据其程序和流程决定
  • 比较数据:贡献者可以是个人或组织。数据通常通过调用公共API来收集确保数据与实际使用的数据相匹配。数据仅用于比较,除非必要,否则不会更改更新数据以匹配外部源。唯一的要求是对所有更改的数据进行版本控制,以及版本编号方案使用

鼓励投稿人使用当地语言和国家组织内外的联系人,以帮助审查当前共同数据和任何增加或修改共同数据的新提议数据特别是鼓励国家标准组织参与数据审查过程。

可能(在世界各地)媒体格式并不总是这样:12, Jan 2015,而且决策是在国家层面上做出的。作为德国人,如果你对此有顾虑,你可以试着在罚单上填写变更建议。