php - PHP - 英语和法语的区域设置特定日期格式
问题描述
特定于语言环境的日期提出了一个有趣的问题,我们不仅需要指定适当的翻译(例如: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 年 5 月 1 日。
处理这个问题的最好方法是什么,它是一个静态类吗?我想按照最佳实践准备我们的解决方案,但我还没有找到答案。
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)
这会是解决这个问题的最佳方式吗?需要识别语言环境并从那里输出?如果您要处理多种语言,这似乎很乏味。
解决方案
在 IntlDateFormatter 旁边使用 DateTime 类。
例子:
<?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
推荐阅读
- node.js - 创建具有给定 mime 类型的随机流
- python - 如何将 ms 中的时间戳转换为 YY-MM-DD 格式?
- c++ - 我可以在 C++ 的子类中将父的 const 成员转换为非常量吗?
- flutter - 输入'未来
' 不是类型 'FutureOr 的子类型 ' 在尝试在颤动中检索蓝牙状态时进行类型转换 - javascript - 输入类型文件未在 IOS Safari 中在 navigation.getCurrentLocations 成功回调中打开
- reactjs - React 将状态值发送到另一个组件
- reactjs - 在 React 中渲染长选择时出现巨大的冻结
- python - 处理大型数据集时 IPython 内核重新启动
- java - 为什么我不能重载这个方法?
- vue.js - 带有 v-model 的 Vue 输入字段不会在挂载时更新