如果它没有扩展DateTime,那么该类会更有用.它唯一能做的就是格式化日期,它完全没有理由成为约会.它可以轻松地按需创建DateTime并使用它而不是$this.
如果你做了这个修改(并适当地将类重命名为例如DateTimeDiffFormatter),那么突然所有的可能性都是开放的:你可以将参数传递给确定要使用的语言的构造函数,或者甚至更好地传递一些对你的i18n组件的引用.然后例如你可以
// I have no idea why this was protected, and probably the class author did not as well
private $strings = array(
'y' => array('years_ago_1', 'years_ago_n'),
// etc etc
);
和
return sprintf($localizer->get_string($this->strings[$intervalKey][$pluralKey]),
$value);
最后,假设您可以将本地化字符串的格式硬编码为“X分钟前”和类似内容,这是一个非常糟糕的主意.该数字需要是格式字符串的一部分,因为在许多文化中它不在“多久以前”部分之前.
更新
我改编了Ilia的候选解决方案,使其符合上述建议;结果是here.