区域特定日期提出了一个有趣的问题,我们不仅需要指定适当的翻译(例如:September
=> septembre
),而且我们还需要确保格式在右侧订单(例如:September 15, 2018
=> 15 septembre 2018
)
PHP的日期函数date()
仅为英文,因此可以立即被忽略。
相反,我的“研究”指向strftime()
。我准备了以下代码:echo strftime('%b %e, %Y',strtotime($date));
此输出:May 1, 2018
和mai 1, 2018
。这似乎解决了这个问题,直到我们让我们的双语测试人员确定日期应该格式化为2018年。
处理这个问题的最佳方法是什么,它是静态类吗?我想按照最佳实践准备我们的解决方案,但我没有找到答案。
class LocaleDate
{
public static function date($date)
{
$locale = setlocale(LC_ALL, 0);
if ($locale == "fr_CA" || $locale == "fr_CA.UTF-8") {
return strftime('%e %b %Y',strtotime($date));
} else {
return strftime('%b %e, %Y',strtotime($date));
}
}
}
echo LocaleDate::date($date)
这是解决此问题的最佳方法吗?需要识别区域并从那里输出?如果您有多种语言可以处理,似乎很乏味。
答案 0 :(得分:0)
将DateTime类与IntlDateFormatter一起使用。
示例:
<?php
$dt = new DateTime;
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');
echo $formatter->format($dt);
输出:
jeu. 17.5.2018
在这里玩游戏:https://3v4l.org/tuEM0
请查看此处的文档:http://php.net/manual/en/class.intldateformatter.php