當使用 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 來提取規則集。