Октябрьское обновление таймзон уже успело неплохо попить крови системных администраторов. Ведь во многих случаях недостаточно простого обновления tzdata, т.к. некоторые пакеты и библиотеки используют свою базу временных зон.
Наши разработчики используют Symfony2, и кое-где версия фреймворка ниже 2.6, а значит Symfony forms использует icu, и обновлять последний как-то мало кто торопится.
Поводом для написсания данного поста стал пост об этой же проблеме на хабре, но там рассматривалось решение проблемы для CentOS.
Мы используем преимущественно ubuntu, поэтому я сделал PPA с обновленными библиотеками (для 12.04 и 14.04).
Возьмем тестовый скрипт из той статьи на хабре и проверим на Ubuntu с «родным» icu:
Для Ubuntu 12.04: sudo aptitude safe-upgrade libicu48
Для Ubuntu 14.04: sudo aptitude safe-upgrade libicu52
Снова запускаем наш скрипт:
UPD, 12 Ноября 2014: в связи с поступившими просьбами сделать обновленный пакет icu 5.2 для 12.04, icu 4.8 переехал в отдельный PPA: ppa:rzz/icu48
Наши разработчики используют Symfony2, и кое-где версия фреймворка ниже 2.6, а значит Symfony forms использует icu, и обновлять последний как-то мало кто торопится.
Поводом для написсания данного поста стал пост об этой же проблеме на хабре, но там рассматривалось решение проблемы для CentOS.
Мы используем преимущественно ubuntu, поэтому я сделал PPA с обновленными библиотеками (для 12.04 и 14.04).
Возьмем тестовый скрипт из той статьи на хабре и проверим на Ubuntu с «родным» icu:
<?php
$dateIn = '27.10.2014';
$tz = 'Europe/Moscow';
date_default_timezone_set($tz);
$intlDateFormatter = new \IntlDateFormatter('ru_RU', 2, -1, $tz, 1, 'dd.MM.yyyy');
$timestamp = $intlDateFormatter->parse($dateIn);
var_dump($intlDateFormatter->format($timestamp));
var_dump(date('d.m.Y', $timestamp));
И выполним его:php ./icutz.php
string(10) "27.10.2014"
string(10) "26.10.2014"
Всё плохо. Теперь подключим ppa и обновим библиотеку из него:
sudo add-apt-repository -y ppa:rzz/icu && sudo aptitude update
Обновляем libicuДля Ubuntu 12.04: sudo aptitude safe-upgrade libicu48
Для Ubuntu 14.04: sudo aptitude safe-upgrade libicu52
Снова запускаем наш скрипт:
php ./icutz.php
string(10) "27.10.2014"
string(10) "27.10.2014"
Готово! Но вообще, конечно, я рекомендую помимо всего прочего обновить версию Symfony, чтобы отвязаться от icu насовсем.
UPD, 12 Ноября 2014: в связи с поступившими просьбами сделать обновленный пакет icu 5.2 для 12.04, icu 4.8 переехал в отдельный PPA: ppa:rzz/icu48
Подскажите, а у вас нет libicu52 для 12.04?
ОтветитьУдалитьДело в том, что в пакете php5.5 (https://launchpad.net/~ondrej/+archive/ubuntu/php5) идет именно icu52
Попробую собрать на днях, раз есть потребность (вообще, теоретически, пакет должен быть универсальным для 14.04 и 12.04, я версии указал строго скорее для перестраховки).
УдалитьПриветствую.
УдалитьВыложил пакет с icu 5.2 для 12.04, попробуйте. Буду благодарен, если отпишетесь по результатам.
ЗЫ. icu 4.8 теперь живет в отдельном ppa (см. апдейт поста в самом конце).
Все сработало, спасибо.
Удалить