本文整理汇总了PHP中IntlDateFormatter::setPattern方法的典型用法代码示例。如果您正苦于以下问题:PHP IntlDateFormatter::setPattern方法的具体用法?PHP IntlDateFormatter::setPattern怎么用?PHP IntlDateFormatter::setPattern使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IntlDateFormatter
的用法示例。
在下文中一共展示了IntlDateFormatter::setPattern方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: buildForm
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Create the sample date and time data to be displayed
// in the select form fields
$now = new \DateTime();
// Set user's timezone
//$now->setTimezone(new \DateTimeZone($options['data']->getTimezone()));
// Format output according to user's locale
$localeFormat = new \IntlDateFormatter($options['data']->getLocale(), \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, (new \DateTimeZone($options['data']->getTimezone()))->getName());
if (is_array($this->formats['date']) && count($this->formats['date']) && is_array($this->formats['time']) && count($this->formats['time'])) {
foreach ($this->formats['date'] as $dateFormat) {
// Display format with current date to user
$localeFormat->setPattern($dateFormat);
$dateFormats[$dateFormat] = $localeFormat->format($now);
}
foreach ($this->formats['time'] as $timeFormat) {
// Display format with current date to user
$localeFormat->setPattern($timeFormat);
$timeFormats[$timeFormat] = $localeFormat->format($now);
}
}
$builder->add('username', 'text', array('constraints' => array(new Assert\NotBlank())))->add('email', 'email', array('constraints' => array(new Assert\NotBlank(), new Assert\Email())))->add('firstName', 'text', array('constraints' => array(new Assert\NotBlank())))->add('lastName', 'text', array('constraints' => array(new Assert\NotBlank())))->add('timezone', 'timezone')->add('avatarImage', new AvatarUploadType(), array('label' => 'Profile image'));
if ($options['new']) {
$builder->add('password', 'repeated', array('required' => true, 'type' => 'password', 'first_name' => 'password', 'second_name' => 'password_again', 'invalid_message' => 'The password fields must match.'));
}
// $builder
// ->add('language', 'language', array(
// 'data' => 'en_US',
// 'disabled' => true
// ))
// ->add('locale', 'locale', array(
// 'data' => 'en_US',
// 'disabled' => true,
// ))
// ->add('currency', 'currency', array(
// 'data' => 'USD',
// 'disabled' => true
// ))
// ->add('dateFormat', 'choice', array(
// 'data' => 'yyyy-MM-dd',
// 'disabled' => true,
// 'label' => 'Date Format',
// 'choices' => $dateFormats,
// 'multiple' => false,
// ))
// ->add('timeFormat', 'choice', array(
// 'data' => 'HH:mm:ss',
// 'disabled' => true,
// 'label' => 'Time Format',
// 'choices' => $timeFormats,
// 'multiple' => false,
// ));
}
示例2: getMonthNames
/**
* @return array
*/
protected function getMonthNames()
{
$formatter = new \IntlDateFormatter(Yii::$app->language, \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatter->setPattern('MMMM');
$list = [];
for ($i = 0; $i < 12; $i++) {
$list[] = $formatter->format(mktime(0, 0, 0, $i, 1, 1970));
}
$list[] = array_shift($list);
return $list;
}
示例3: ruDateFormat
public function ruDateFormat($dateRaw)
{
if ($dateRaw instanceof \DateTime) {
$dateTime = $dateRaw;
} else {
$dateTime = new \DateTime($dateRaw);
}
$formatter = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::NONE, \IntlDateFormatter::NONE);
$formatter->setPattern('d MMMM YYYY');
return $formatter->format($dateTime);
}
示例4: generateMonthChoices
/**
* Generates an array of localized month choices
*
* @param array $months The month numbers to generate
* @return array The localized months respecting the configured
* locale and date format
*/
protected function generateMonthChoices(array $months)
{
$pattern = $this->formatter->getPattern();
if (preg_match('/M+/', $pattern, $matches)) {
$this->formatter->setPattern($matches[0]);
$choices = array();
foreach ($months as $month) {
$choices[$month] = $this->formatter->format(gmmktime(0, 0, 0, $month));
}
$this->formatter->setPattern($pattern);
} else {
$choices = $this->generatePaddedChoices($months, 2);
}
return $choices;
}
示例5: __invoke
/**
*
* @param string $time
* @param string $formatDate
* @param string $formatTime
* @param string $seperator
* @return string
*/
public function __invoke($time = null, $formatDate = null, $formatTime = null, $pattern = null)
{
if (null === $time) {
$datetime = new \DateTime();
} else {
$datetime = new \DateTime($time);
}
if (null === $formatDate) {
$formatDate = \IntlDateFormatter::LONG;
}
if ('LONG' === $formatDate) {
$formatDate = \IntlDateFormatter::LONG;
}
if ('FULL' === $formatDate) {
$formatDate = \IntlDateFormatter::FULL;
}
if ('MEDIUM' === $formatDate) {
$formatDate = \IntlDateFormatter::MEDIUM;
}
if ('SHORT' === $formatDate) {
$formatDate = \IntlDateFormatter::SHORT;
}
if (false === $formatDate) {
$formatDate = \IntlDateFormatter::NONE;
}
if ('LONG' === $formatTime) {
$formatTime = \IntlDateFormatter::LONG;
}
if ('SHORT' === $formatTime) {
$formatTime = \IntlDateFormatter::SHORT;
}
if (null === $formatTime) {
$formatTime = \IntlDateFormatter::NONE;
}
$fmt = new \IntlDateFormatter("de-DE", $formatDate, $formatTime);
// , "Europe/Berlin", \IntlDateFormatter::GREGORIAN );
if (null !== $pattern) {
$fmt->setPattern($pattern);
}
return $fmt->format($datetime);
}
示例6: processDate
/**
* format ela date dd/MM/yyyy
* @param \IntlDateFormatter $formatter
* @param \Datetime $date
* @return string
*/
protected function processDate(\IntlDateFormatter $formatter, \Datetime $date)
{
$formatter->setPattern('dd/MM/yyyy');
return $formatter->format((int) $date->format('U'));
}
示例7: array
<?php
$formatter = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatter->setPattern("d MMMM YYYY 'в' H:mm");
?>
<h3 class="text-center">Отчёт по расселению участников</h3>
<p>Список мест проживания участников <?php
echo $this->pixie->config->get('party.event.title');
?>
из других городов. Сформирован <?php
echo $formatter->format(new \DateTime('now'));
?>
. Готов на <?php
echo $page['ready'][0];
?>
%. Расселены <?php
echo $page['ready'][1] . ' ' . $this->pixie->party->declension($page['ready'][1], array('участник', 'участника', 'участников'));
?>
из <?php
echo $page['ready'][2] . ' ' . $this->pixie->party->declension($page['ready'][2], array('нуждающегося', 'нуждающихся', 'нуждающихся'));
?>
в жилье, использованы <?php
echo $page['ready'][3] . ' ' . $this->pixie->party->declension($page['ready'][3], array('дом', 'дома', 'домов'));
?>
.</p>
<table class="table table-bordered1 table-condensed">
<thead>
<tr class="text-info">
<th><i class="fa fa-home"></i> Хозяева</th>
<th colspan="6"><i class="fa fa-child"></i> Гости</th>
示例8: time
static function time($token, $options = array(), $attr)
{
$options['relative'] = $options['relative'] === 'true' || $options['relative'] == '1';
$has_class = $options['class'] !== 'false';
$options['rss'] = $options['rss'] !== 'false';
if (!$token) {
$token = array('timestamp' => time(), 'utc' => true);
} else {
if (!isset($token['timestamp'])) {
if (isset($token['album'])) {
$token = $token['album']['date'];
} else {
if (isset($token['date']) && isset($token['date']['timestamp'])) {
$token = $token['date'];
} else {
if (isset($token['event']) || isset($token['__koken__']) && $token['__koken__'] === 'event' || isset($token['year'])) {
$obj = isset($token['event']) ? $token['event'] : $token;
$str = $obj['year'] . '-';
$format = 'Y';
if (isset($obj['month'])) {
$str .= $obj['month'] . '-';
$format = 'F ' . $format;
if (isset($obj['day'])) {
$str .= $obj['day'];
$format = 'date';
} else {
$str .= '01';
}
} else {
$str .= '01-01';
}
$token = array('timestamp' => strtotime($str), 'utc' => true);
$options['show'] = $format;
} else {
if (isset($token['year'])) {
$m = isset($token['month']) ? $token['month'] : 1;
$d = isset($token['day']) ? $token['day'] : 1;
$token = array('timestamp' => strtotime($token['year'] . '-' . $m . '-' . $d), 'utc' => true);
$options['show'] = 'F Y';
}
}
}
}
}
}
$timestamp = $token['timestamp'];
// Don't timeshift dates where UTC param is false
// Assume these dates are hardwired, like captured_on
if (isset($token['utc']) && !$token['utc']) {
date_default_timezone_set('UTC');
}
if ($options['rss']) {
echo date('D, d M Y H:i:s O', $timestamp);
} else {
if ($has_class) {
$klass = $options['class'];
} else {
$klass = '';
}
if ($options['relative']) {
$klass .= ' k-relative-time';
}
if (!empty($klass)) {
$klass = ' class="' . $klass . '"';
}
switch ($options['show']) {
case 'both':
$f = self::$site['date_format'] . ' ' . self::$site['time_format'];
break;
case 'date':
$f = self::$site['date_format'];
break;
case 'time':
$f = self::$site['time_format'];
break;
default:
$f = $options['show'];
break;
}
$dt = date('c', $timestamp);
if (class_exists('IntlDateFormatter') && isset(self::$settings['language'])) {
$df = new IntlDateFormatter(self::$settings['language'], IntlDateFormatter::NONE, IntlDateFormatter::NONE);
$df->setPattern(self::to_date_field_symbol($f));
$text = $df->format(new DateTime($dt));
} else {
$text = date($f, $timestamp);
}
$attr_clean = array();
foreach ($attr as $key => $val) {
$attr_clean[] = "{$key}=\"{$val}\"";
}
$attr = join(' ', $attr_clean);
echo <<<OUT
<time{$klass} datetime="{$dt}" {$attr}>
\t{$text}
</time>
OUT;
}
date_default_timezone_set(Koken::$site['timezone']);
}
示例9: testFormatWithDefaultTimezoneIntlShouldUseDefaultDateTimeZoneVariable
/**
* @runInSeparateProcess
*/
public function testFormatWithDefaultTimezoneIntlShouldUseDefaultDateTimeZoneVariable()
{
if (!$this->isGreaterOrEqualThanPhpVersion('5.5.0-dev')) {
$this->markTestSkipped('Only in PHP 5.5 IntlDateFormatter depends on default timezone (`date_default_timezone_get()`).');
}
$this->skipIfIntlExtensionIsNotLoaded();
$this->skipIfICUVersionIsTooOld();
$tz = date_default_timezone_get();
date_default_timezone_set('Europe/Paris');
$formatter = new \IntlDateFormatter('en', StubIntlDateFormatter::MEDIUM, StubIntlDateFormatter::SHORT);
$formatter->setPattern('yyyy-MM-dd HH:mm:ss');
$this->assertEquals('Europe/Paris', date_default_timezone_get());
$this->assertEquals($this->createDateTime(0, 'Europe/Paris')->format('Y-m-d H:i:s'), $formatter->format(0));
// Restores TZ.
date_default_timezone_set($tz);
}
示例10: getLocalizedTime
public function getLocalizedTime(\DateTime $object, $timezone = null)
{
if (!$timezone) {
$timezone = $this->container->get('session')->get('campaignchain.timezone');
}
// Apply timezone and locale to DateTime object
$localeFormat = new \IntlDateFormatter($this->container->get('session')->get('campaignchain.locale'), \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, $timezone);
$localeFormat->setPattern($this->container->get('session')->get('campaignchain.timeFormat'));
return $localeFormat->format($object);
}
示例11: action_message
public function action_message()
{
if ($this->request->post('action') == 'read') {
if ($this->request->post('type') == 'user') {
if (is_numeric($this->request->post('id'))) {
$msg = $this->pixie->orm->get('usermsg', $this->request->post('id'));
if ($msg->loaded()) {
$formatter = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatter->setPattern("d MMMM',' h:mm");
die(json_encode(array("status" => "success", "result" => $msg->content, "title" => "Сообщение от {$msg->sender->name} за " . $formatter->format(new \DateTime($msg->date)))));
}
}
}
} else {
if ($this->request->post('action') == 'send') {
if ($this->request->post('type') == 'user' && is_numeric($this->request->post('id')) && is_numeric($this->request->post('template'))) {
$formatter = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatter->setPattern('d MMMM');
$htmlText = "";
$user = $this->pixie->orm->get('user', $this->request->post('id'));
if ($user->loaded()) {
// Шаблон "Напомнить об активации"
if ($this->request->post('template') == 1) {
$htmlText .= "Мир вам, {$user->name}!\n\nВы указали этот email ({$user->email}) " . $formatter->format(new \DateTime($user->codesent)) . " при регистрации на конференцию Я МОЛОДОЙ! 2014.\n\nМы заметили, что на сегодняшний день вы по каким-то причинам не прошли регистрацию до конца. Напоминаем, что регистрация считается завершённой после добавления анкеты участника и внесения предоплаты. Можем ли у вас узнать, что вам помешало? Может быть, возникли какие-нибудь трудности с самой регистрацией, и вам нужна помощь?\n\nПожалуйста, смело обращайтесь: мы готовы ответить на ваши вопросы и постараемся помочь!\n";
if (strtotime($user->codesent) < strtotime('2014-07-01')) {
$htmlText .= "\nВы приступали к регистрации заблаговременно, и мы ценим вашу пунктуальность! К сожалению, на тот момент у нас действовала старая форма регистрации на сайте imolod.ru, которую мы заменили 1 июля на новый сайт со всеми действующими условиями. Просим у вас прощения за то, что вначале мы не предусмотрели предоплату 500 руб., а потом её пришлось ввести! И поэтому индивидуально для вас мы отменяем повышение общего регистрационного взноса после 5 августа до 2000 рублей: для вас он в любое время останется равным 1500 руб.\n";
}
if ($user->pass && $user->active) {
$htmlText .= "\nДля продолжения регистрации вам нужно войти на сайт с помощью формы для входа:\nhttp://2014.imolod.ru/register#start\n";
} else {
if ($user->code) {
$htmlText .= "\nДля продолжения регистрации вам нужно перейти по этой ссылке и придумать для себя пароль:\nhttp://2014.imolod.ru/register/confirm?email={$user->email}&code={$user->code}\n";
}
}
$htmlText .= "\nЗатем вы откроете свой профиль для добавления анкет участников. Проверьте, пожалуйста, что все сведения в анкете указаны верно. Дальнейшие инструкции по оплате вы увидите, нажав кнопку оплаты.\n\nЕсли у вас есть замечания или предложения по методу регистрации, сообщите их нам, пожалуйста!\n\n\nПрограмма конференции:\nhttps://vk.com/page-71444548_48399312\n\nПодробные условия регистрации:\nhttps://2014.imolod.ru/register\n\nИнструкция по регистрации с картинками:\nhttps://vk.com/page-71444548_48108588\n\nВопросы и ответы в группе ВКонтакте:\nhttps://vk.com/board71444548\n\nБлагословений! Ждём вас!\n\n--\nОрганизаторы конференции Я МОЛОДОЙ! 2014 в Волгограде\ninfo@imolod.ru\nhttp://2014.imolod.ru\nhttps://vk.com/imolod14\n";
// echo $htmlText;
} else {
if ($this->request->post('template') == 2) {
$htmlText .= "Мир вам, {$user->name}!\n\nМы, организаторы \"Я молодой\", очень рады, что вы собираетесь на эту конференцию и " . $formatter->format(new \DateTime($user->codesent)) . " решили зарегистрироваться на нашем сайте! Сейчас мы вовсю готовимся, ведь до начала осталось всего " . $this->pixie->party->daysLeft() . ".\n\nВаша регистрация очень важна для нас, чтобы спланировать все расходы и расселение. Ещё мы просим всех участников пожертвовать на нужды конференции по " . $this->pixie->config->get('party.periods.1.prices.full') . " рублей, из которых " . $this->pixie->config->get('party.periods.1.prices.prepay') . " нужно отправить заранее (можно и позже, но тогда вся сумма выйдет больше). Наше общее желание - чтобы во время всей конференции молодёжь могла вместе поклоняться Богу спокойно от бытовых проблем и суеты!\n\n";
$partsCount = $user->participants->where('cancelled', 0)->count_all();
if ($partsCount > 1) {
$partsUnpayed = $user->participants->where('cancelled', 0)->where('money', '<', $this->pixie->config->get('party.periods.1.prices.prepay'))->find_all()->as_array();
$names = array();
foreach ($partsUnpayed as $part) {
$names[] = $part->firstname . ' ' . $part->lastname;
}
$htmlText .= "Вы уже добавили анкеты {$partsCount} " . $this->pixie->party->declension($partsCount, array('участника', 'участников', 'участников')) . ", и для успешного завершения регистрации осталось внести предоплату за следующих из них: " . implode(", ", $names) . ".";
} else {
if ($partsCount) {
$htmlText .= "Вы уже добавили свою анкету участника, и для успешного завершения регистрации осталось только внести предоплату.";
} else {
$htmlText .= "Для успешного завершения регистрации вам нужно заполнить свою анкету участника и внести предоплату.";
}
}
$htmlText .= "\n\nА сделать нам денежный перевод совсем не сложно, так как доступны разные способы оплаты, и многие участники уже с этим справились. По этой ссылке вы перейдёте к подробным условиям и ко входу в свой профиль на сайте:\nhttp://2014.imolod.ru/register\n\nНаша группа Вконтакте, в которой есть программа конференции и ответы на вопросы:\nhttp://vk.com/imolod14\n\n";
if (!$user->grace) {
if (strtotime('today') == strtotime($this->pixie->config->get('party.periods.1.lastday'))) {
$htmlText .= "Сегодня, " . $formatter->format(new \DateTime('today')) . ", последний день для внесения предоплаты, чтобы для вас общий размер взноса за одного участника сохранился равным " . $this->pixie->config->get('party.periods.1.prices.full') . " руб. ";
} else {
if (strtotime('tomorrow') == strtotime($this->pixie->config->get('party.periods.1.lastday'))) {
$htmlText .= "Завтра, " . $formatter->format(new \DateTime('tomorrow')) . ", последний день для внесения предоплаты, чтобы для вас общий размер взноса за одного участника сохранился равным " . $this->pixie->config->get('party.periods.1.prices.full') . " руб. ";
}
}
}
$htmlText .= "Пожалуйста, смело обращайтесь к нам за помощью или с вопросами - мы готовы ответить и пойти вам на встречу!\n\n--\nКоманда организаторов конференции \"Я МОЛОДОЙ\" в Волгограде\ninfo@imolod.ru\nhttp://2014.imolod.ru\nhttp://vk.com/imolod14\n";
} else {
if ($this->request->post('template') == 3) {
$htmlText .= "Мир вам, {$user->name}!\n\nСистема регистрации нам показывает, что вы заполнили анкету участника и пробовали отправить регистрационный взнос, но отправка не получилась. Вы можете проверить нынешнее состояние оплаты в своём профиле, в таблице с участниками:\nhttp://" . $this->pixie->config->get('party.event.domain') . "/register/profile\n\nЕсли вы совершали оплату через банковский перевод или Сбербанк Онлайн, то нормальный срок обработки составляет 2 рабочих дня. Остальные виды платежей исполняются всего за несколько минут. Если все сроки вышли, а в профиле сумма оплаты не появилась, значит платёж неудачный.\n\nМожем ли мы вам помочь? Пожалуйста, обращайтесь к нам со всеми вопросами и замечаниями! Осталось всего " . $this->pixie->party->daysLeft() . " до конференции, но ещё можно успеть. Мы учитываем, что вы пытались всё сделать ещё до конца льготного периода регистрации, поэтому, если вы сообщите нам свою проблему, размер взноса для вас не увеличится.\n\n--\nКоманда организаторов конференции \"Я МОЛОДОЙ\" в Волгограде\ninfo@imolod.ru\nhttp://2014.imolod.ru\nhttp://vk.com/imolod14\n";
// die($htmlText);
}
}
}
// template 3
// Осталось отправить, если есть что:
if ($htmlText) {
$result = $this->pixie->email->send(array($user->email => "=?utf-8?B?" . base64_encode($user->name) . "?="), array($this->pixie->config->get('party.contacts.info') => "=?utf-8?B?" . base64_encode('Организаторы ' . $this->pixie->config->get('party.event.short_title')) . "?="), "Ваша регистрация на " . $this->pixie->config->get('party.event.short_title'), $htmlText, false);
if ($result) {
$newMsg = $this->pixie->orm->get('usermsg');
$newMsg->content = $htmlText;
$newMsg->type = 'email';
$newMsg->date = date('Y-m-d H:i:s', time());
$newMsg->save();
$newMsg->add('sender', $this->pixie->auth->user());
$newMsg->add('recipient', $user);
$newMsg->save();
die(json_encode(array("status" => "success")));
}
}
// Отправка
}
}
}
}
}
示例12: formatMonths
private function formatMonths(\IntlDateFormatter $formatter, array $months)
{
$pattern = $formatter->getPattern();
$timezone = $formatter->getTimezoneId();
$formatter->setTimezoneId(\DateTimeZone::UTC);
if (preg_match('/M+/', $pattern, $matches)) {
$formatter->setPattern($matches[0]);
foreach ($months as $key => $value) {
$months[$key] = $formatter->format(gmmktime(0, 0, 0, $key, 15));
}
// I'd like to clone the formatter above, but then we get a
// segmentation fault, so let's restore the old state instead
$formatter->setPattern($pattern);
}
$formatter->setTimezoneId($timezone);
return $months;
}
示例13: generateSprintsForTask
public function generateSprintsForTask($project)
{
$sprints_numbers = array();
$sprints_dates = array();
$sprints_dates_text = array();
$interval = date_diff(new \DateTime(), $project->getCreatedAt())->days;
$current_sprint = (int) ceil($interval / $project->getSprintLength());
$formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE);
$formatter->setPattern('d MMMM Y');
for ($i = 0; $i < 6; $i++) {
$sprints_numbers[$i] = $current_sprint + $i;
$start_date = clone $project->getCreatedAt();
$start_date->add(date_interval_create_from_date_string($project->getSprintLength() * ($current_sprint + $i - 1) . ' days'));
$end_date = clone $start_date;
$end_date->add(date_interval_create_from_date_string($project->getSprintLength() - 1 . 'days'));
$sprints_dates[$i] = ['start_date' => $start_date, 'end_date' => $end_date];
$sprints_dates_text[$i] = $formatter->format($start_date) . ' — ' . $formatter->format($end_date);
}
return array($sprints_numbers, $sprints_dates, $sprints_dates_text, $current_sprint);
}
示例14:
<?php
$formatter = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatter->setPattern('d MMMM');
?>
<div class="table-responsive">
<table class="table table-condensed table-hover dataTables users">
<thead>
<tr>
<th data-sort="ascending">id</th>
<th>имя</th>
<th>email</th>
<th>дата</th>
<th>участники</th>
<th>незарег</th>
<th>платежи</th>
<th>льгота</th>
<th>активен</th>
<th>роль</th>
<th data-orderable="0"> </th>
</tr>
</thead>
<tbody>
<?php
foreach ($page['users'] as $user) {
?>
<tr<?php
if (!$user->active) {
echo " class=\"text-muted\"";
}
?>
示例15: action_birthdays
public function action_birthdays()
{
$formatterShort = new \IntlDateFormatter('ru_RU', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL);
$formatterShort->setPattern("d MMMM");
$birthdays = $this->pixie->party->getBirthdays();
$this->page['title'] = 'Именинники';
$this->page['content'] = "";
foreach ($birthdays as $birthday) {
$this->page['content'] .= $formatterShort->format(new \DateTime($birthday['date'])) . " — {$birthday['name']} {$birthday['age']} " . $this->pixie->party->declension($birthday['age'], array('год', 'года', 'лет')) . "<br/>\n";
}
}