首页 > 解决方案 > PHP - 英语和法语的区域设置特定日期格式

问题描述

特定于语言环境的日期提出了一个有趣的问题,我们不仅需要指定适当的翻译(例如:September=> septembre),而且我们还需要确保格式的顺序正确(例如:September 15, 2018=> 15 septembre 2018

PHP 的日期函数date()只有英文,所以可以立即忽略。

相反,我的“研究”将我指向strftime(). 我准备了以下代码:echo strftime('%b %e, %Y',strtotime($date));

这输出:May 1, 2018mai 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)

这会是解决这个问题的最佳方式吗?需要识别语言环境并从那里输出?如果您要处理多种语言,这似乎很乏味。

标签: phplocalestrftime

解决方案


在 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


推荐阅读