1

我正在考虑使用IntlDateFormatter该类来国际化应用程序中的日期和时间,但手册并不清楚该怎么做。

假设我在应用程序中有以下日期、时间和日期时间格式:

2013-07-01 晚上 10:00

7 月 1 日晚上 10:00

7 月 1 日

下午10:00

我想对其进行本地化,以便它们在另一个语言环境中显示如下:

2013-07-01 22h00

Juillet 1 至 22h00

朱丽叶 1

22h00

我该怎么做呢?我是否创建了八个不同的IntlDateFormatter对象来处理这个问题,因为这看起来不是很直观?

$fmt['en-CA']['dt_long'] = new IntlDateFormatter("en_CA", null, null, null, IntlDateFormatter::GREGORIAN, 'Y-M-dd h:mm a');
$fmt['fr-CA']['dt_long2'] = new IntlDateFormatter("fr_CA", null, null, null, IntlDateFormatter::GREGORIAN, 'Y-M-dd H:mm');

$fmt['en-CA']['dt_short'] = new IntlDateFormatter("en_CA", null, null, null, IntlDateFormatter::GREGORIAN, 'MMM d @ h:mm a');
$fmt['fr-CA']['dt_short2'] = new IntlDateFormatter("fr_CA", null, null, null, IntlDateFormatter::GREGORIAN, 'MMM d 'à' H'h'mm');

...

我认为我做错了,因为带有类常量的第二个和第三个参数应该是有原因的,对吧?

例子和解释会很棒。

4

1 回答 1

2

如果您想要这四种特定格式,那么您的代码就是正确的方法。包装 ICU 库的 IntlDateFormatter 提供了几种标准格式,我相信每个国家/语言都有一些人同意它们。

如果你对他们的思维“标准”没问题,你可以这样称呼班级,

if (version_compare(PHP_VERSION, '5.3.0', '<')) {
    exit ('IntlDateFormatter is available on PHP 5.3.0 or later.');
}    
if (!class_exists('IntlDateFormatter')) {
    exit ('You need to install php_intl extension.');
}

$mediumShortFormatter = new IntlDateFormatter(
    'fr_CA',
    IntlDateFormatter::MEDIUM,
    IntlDateFormatter::SHORT
);
$longShortFormatter = new IntlDateFormatter(
    'fr_CA',
    IntlDateFormatter::LONG,
    IntlDateFormatter::SHORT
);
$longNoneFormatter = new IntlDateFormatter(
    'fr_CA',
    IntlDateFormatter::LONG,
    IntlDateFormatter::NONE
);
$noneShortFormatter = new IntlDateFormatter(
    'fr_CA',
    IntlDateFormatter::NONE,
    IntlDateFormatter::SHORT
);

$datetime = new DateTime("2013-07-01 22:00:00");
echo $mediumShortFormatter->format($datetime) . "\n";
echo $longShortFormatter->format($datetime) . "\n";
echo $longNoneFormatter->format($datetime) . "\n";
echo $noneShortFormatter->format($datetime) . "\n";

上面的代码返回给我这些,

2013-07-01 22:00
1 juillet 2013 22:00
1 juillet 2013
22:00

这些与您问题中的不同。如果你真的需要你展示的原始格式,是的,你需要一一指定。

在加拿大法语的情况下,您可能非常确定您的格式对您的用户来说是正确的。但是对于其他语言环境,您会设置那些自定义格式吗?如果标准格式(甚至不是理想的,但是)您的用户可以接受,我建议您使用这些默认格式,那么您无需担心其他语言/国家/地区的正确格式。

于 2013-10-29T08:39:32.097 回答