0

Symfony 2 在自己的 DateTimeToLocalizedStringTransformer 中使用 intlDateFormatter 但不能正常工作。

$tz = new DateTimeZone('Europe/Moscow');
$date = new DateTime('1 march', $tz);


echo "PHP: " . phpversion() . "<br/>\n";
echo "Intl: " . phpversion('intl') . "<br/>\n";
echo "<br/>\n";

echo "TZ: " . $tz->getName() . "<br/>\n";

echo "Native:<br/>\n";
echo $date->format('H:i:s d.m.Y');
echo "<br/>\n";


echo "Intl:<br/>\n";
$formatter = new IntlDateFormatter('RU_ru', IntlDateFormatter::FULL, IntlDateFormatter::FULL, $tz->getName());
echo $formatter->format($date);
echo "\n";

我有结果

PHP: 5.3.22-1~dotdeb.0
Intl: PECL-2.0.1
TZ: Europe/Moscow

Native:
00:00:00 01.03.2013
Intl:
28 february 2013 23:00:00

我试试

pecl install timezonedb
pecl install intl

并重新安装 libicu44

4

1 回答 1

1

我明白了:

<?php
$tz = new DateTimeZone('UTC');
$date = new DateTime('1 march', $tz);

echo "ICU data version: ", INTL_ICU_DATA_VERSION, "\n";
$formatter = new IntlDateFormatter('RU_ru', IntlDateFormatter::FULL,
        IntlDateFormatter::FULL, "Europe/Moscow");
echo $formatter->format($date), "\n";
ICU数据版本:4.4.0.1
пятница, 1 марта 2013 г. 3:00:00 Московское стандартное время

这是错误的,因为莫斯科现在全年都在 UTC+4。然而,这是一个相当新的发展(他们仅在几年前放弃了 DST),因此 ICU 数据太旧而无法反映这一点。如果您使用更新版本的 ICU 进行测试,您会得到正确的结果:

ICU数据版本:49.1
пятница, 1 марта 2013 г., 4:00:00 Московское стандартное время
于 2013-03-08T11:15:36.953 回答