当使用 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 提取规则集。