使用 NumberFormatter::DURATION 类型格式化持续时间时,您可能还需要使用 NumberFormatter::setTextAttribute 来获取所需的输出。
<?php
$fmt = new NumberFormatter('en', NumberFormatter::DURATION);
var_dump($fmt->format(12345));
$fmt->setTextAttribute(NumberFormatter::DEFAULT_RULESET, "%in-numerals");
var_dump($fmt->format(12345));
$fmt->setTextAttribute(NumberFormatter::DEFAULT_RULESET, "%with-words");
var_dump($fmt->format(12345));
$fmt2 = new NumberFormatter('fr', NumberFormatter::DURATION);
var_dump($fmt2->format(12345));
?>
这有点违反直觉,因为关于 DURATION 类型的文档不多。
此外,据我所知,只有英语 (en) 语言环境支持 "%in-numerals" 和 "%with-words" 规则集。其他语言环境似乎只是将输入格式化为使用 DECIMAL 类型(至少使用 "fr" 或 "de" 作为目标语言环境)。
跨不同语言环境提供该功能的一种方法是提取 NumberFormatter::DURATION 隐式使用的规则集,并将其调整为目标语言环境。使用 NumberFormatter::getPattern 提取规则集。