Spec-Zone.ru › Yii 1.1

CDateFormatter

Пакет system.i18n
Наследование class CDateFormatter » CComponent
С версии 1.0
Исходный код framework/i18n/CDateFormatter.php
CDateFormatter предоставляет функциональность локализации дат и времени.

CDateFormatter позволяет форматировать даты и время с учетом локали. Шаблоны интерпретируются в локали, с которой связан экземпляр CDateFormatter. Например, названия месяцев и дней недели могут отличаться в разных локалях, что приводит к различным результатам форматирования. Шаблоны, которые распознает CDateFormatter, определены в CLDR.

CDateFormatter поддерживает предопределённые шаблоны, а также настраиваемые:
  • Метод formatDateTime() форматирует дату или время или оба используя предопределённые шаблоны, включая 'full', 'long', 'medium' (по умолчанию) и 'short'.
  • Метод format() форматирует дату и время используя указанный шаблон. Подробнее о распознаваемых символах шаблонов см. http://www.unicode.org/reports/tr35/#Date_Format_Patterns.

Публичные методы

Метод Описание Определено в
__call() Вызывает метод по имени, который не является методом класса. CComponent
__construct() Конструктор. CDateFormatter
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
asa() Возвращает объект поведения по имени. CComponent
attachBehavior() Присоединяет поведение к этому компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик события к событию. CComponent
canGetProperty() Определяет, может ли свойство читаться. CComponent
canSetProperty() Определяет, может ли свойство устанавливаться. CComponent
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик события. CComponent
disableBehavior() Отключает присоединенное поведение. CComponent
disableBehaviors() Отключает все присоединённые поведения к этому компоненту. CComponent
enableBehavior() Включает присоединенное поведение. CComponent
enableBehaviors() Включает все присоединённые поведения к этому компоненту. CComponent
evaluateExpression() Вычисляет выражение PHP или обратный вызов в контексте этого компонента. CComponent
format() Форматирует дату в соответствии с настраиваемым шаблоном. CDateFormatter
formatDateTime() Форматирует дату в соответствии с предопределённым шаблоном. CDateFormatter
getEventHandlers() Возвращает список присоединённых обработчиков события для события. CComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, имеет ли указанное событие прикреплённые обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Вызывает событие. CComponent

Защищённые методы

Метод Описание Определено в
formatDay() Получение дня месяца. CDateFormatter
formatDayInMonth() Получение дня недели в месяце, например, 2-й вторник июля. CDateFormatter
formatDayInWeek() Получение дня недели. CDateFormatter
formatDayInYear() Получение дня в году, например [1-366] CDateFormatter
formatEra() Получение эры. Например, в григорианском календаре год > 0 - н. э., иначе до н. э. CDateFormatter
formatHour12() Получение часов в 12-часовом формате, т.е. [1-12] CDateFormatter
formatHour24() Получение часов в 24-часовом формате, т.е. [0-23]. CDateFormatter
formatHourInDay() Получение часов [1-24]. CDateFormatter
formatHourInPeriod() Получение часов в формате AM/PM, например [0-11] CDateFormatter
formatMinutes() Получение минут. CDateFormatter
formatMonth() Получение месяца. CDateFormatter
formatPeriod() Получение обозначения AM/PM. 12 часов дня - PM, 12 часов ночи - AM. CDateFormatter
formatSeconds() Получение секунд. CDateFormatter
formatTimeZone() Получение часового пояса сервера. CDateFormatter
formatWeekInMonth() Получение недели в месяце. CDateFormatter
formatWeekInYear() Получение недели в году. CDateFormatter
formatYear() Получение года. CDateFormatter
parseFormat() Разбирает шаблон формата даты и времени. CDateFormatter

Подробное описание методов

__construct() метод

public void __construct(mixed $locale)
$locale mixed Идентификатор локали (строка) или объект CLocale
Исходный код: framework/i18n/CDateFormatter.php#72 (показать)
public function __construct($locale)
{
    if(
is_string($locale))
        
$this->_locale=CLocale::getInstance($locale);
    else
        
$this->_locale=$locale;
}

Конструктор.

format() метод

public string format(string $pattern, mixed $time)
$pattern string шаблон (см. http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns)
$time mixed метка времени Unix или строка в формате strtotime
{return} string отформатированная дата и время. Null, если $time равно null. (проверка на null доступна начиная с Yii 1.1.11)
Исходный код: framework/i18n/CDateFormatter.php#86 (показать)
public function format($pattern,$time)
{
    if(
$time===null)
        return 
null;

    if(
is_string($time))
    {
        if(
ctype_digit($time) || ($time{0}=='-' && ctype_digit(substr($time, 1))))
            
$time=(int)$time;
        else
            
$time=strtotime($time);
    }
    
$date=CTimestamp::getDate($time,false,false);
    
$tokens=$this->parseFormat($pattern);
    foreach(
$tokens as &$token)
    {
        if(
is_array($token)) // a callback: method name, sub-pattern
            
$token=$this->{$token[0]}($token[1],$date);
    }
    return 
implode('',$tokens);
}

Форматирует дату по настроенному шаблону.

formatDateTime() метод

public string formatDateTime(mixed $timestamp, string $dateWidth='medium', string $timeWidth='medium')
$timestamp mixed метка времени Unix или строка в формате strtotime
$dateWidth string ширина шаблона даты. Может быть 'full', 'long', 'medium' и 'short'. Если null, часть даты не будет отображаться
$timeWidth string ширина шаблона времени. Может быть 'full', 'long', 'medium' и 'short'. Если null, часть времени не будет отображаться
{return} string отформатированная дата и время.
Исходный код: framework/i18n/CDateFormatter.php#118 (показать)
public function formatDateTime($timestamp,$dateWidth='medium',$timeWidth='medium')
{
    if(!empty(
$dateWidth))
        
$date=$this->format($this->_locale->getDateFormat($dateWidth),$timestamp);

    if(!empty(
$timeWidth))
        
$time=$this->format($this->_locale->getTimeFormat($timeWidth),$timestamp);

    if(isset(
$date) && isset($time))
    {
        
$dateTimePattern=$this->_locale->getDateTimeFormat();
        return 
strtr($dateTimePattern,array('{0}'=>$time,'{1}'=>$date));
    }
    elseif(isset(
$date))
        return 
$date;
    elseif(isset(
$time))
        return 
$time;
}

Форматирует дату по предопределенному шаблону. Предопределенный шаблон определяется на основе ширины шаблона даты и времени.

formatDay() метод

protected string formatDay(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} string день месяца
Исходный код: framework/i18n/CDateFormatter.php#263 (показать)
protected function formatDay($pattern,$date)
{
    
$day=$date['mday'];
    if(
$pattern==='d')
        return 
$day;
    elseif(
$pattern==='dd')
        return 
str_pad($day,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for day of the month must be "d" or "dd".'));
}

Возвращает день месяца. "d" для беззаполнения, "dd" всегда возвращает число дня с двумя цифрами, например, 05.

formatDayInMonth() метод

protected integer formatDayInMonth(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} integer день месяца
Исходный код: framework/i18n/CDateFormatter.php#298 (показать)
protected function formatDayInMonth($pattern,$date)
{
    if(
$pattern==='F')
        return (int)((
$date['mday']+6)/7);
    else
        throw new 
CException(Yii::t('yii','The pattern for day in month must be "F".'));
}

Возвращает день недели в месяце, например, 2-я среда июля.

См. также

  • http://www.unicode.org/reports/tr35/#Date_Format_Patterns

formatDayInWeek() метод

protected string formatDayInWeek(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} string день недели.
Исходный код: framework/i18n/CDateFormatter.php#317 (показать)
protected function formatDayInWeek($pattern,$date)
{
    
$day=$date['wday'];
    switch(
$pattern)
    {
        case 
'E':
        case 
'EE':
        case 
'EEE':
        case 
'eee':
            return 
$this->_locale->getWeekDayName($day,'abbreviated');
        case 
'EEEE':
        case 
'eeee':
            return 
$this->_locale->getWeekDayName($day,'wide');
        case 
'EEEEE':
        case 
'eeeee':
            return 
$this->_locale->getWeekDayName($day,'narrow');
        case 
'e':
        case 
'ee':
        case 
'c':
            return 
$day ? $day : 7;
        case 
'ccc':
            return 
$this->_locale->getWeekDayName($day,'abbreviated',true);
        case 
'cccc':
            return 
$this->_locale->getWeekDayName($day,'wide',true);
        case 
'ccccc':
            return 
$this->_locale->getWeekDayName($day,'narrow',true);
        default:
            throw new 
CException(Yii::t('yii','The pattern for day of the week must be "E", "EE", "EEE", "EEEE", "EEEEE", "e", "ee", "eee", "eeee", "eeeee", "c", "cccc" or "ccccc".'));
    }
}

Возвращает день недели. "E", "EE", "EEE" вернут сокращенное название дня недели, например, "Втр"; "EEEE" вернет полное название дня недели; "EEEEE" вернет укороченное название дня недели, например, "В";

См. также

  • http://www.unicode.org/reports/tr35/#Date_Format_Patterns

formatDayInYear() метод

protected integer formatDayInYear(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} integer часы в формате AM/PM.
Исходный код: framework/i18n/CDateFormatter.php#281 (показать)
protected function formatDayInYear($pattern,$date)
{
    
$day=$date['yday'];
    if((
$n=strlen($pattern))<=3)
        return 
str_pad($day,$n,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for day in year must be "D", "DD" or "DDD".'));
}

Возвращает день в году, например, [1-366]

formatEra() метод

protected string formatEra(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} string эра
Исходный код: framework/i18n/CDateFormatter.php#542 (показать)
protected function formatEra($pattern,$date)
{
    
$era=$date['year']>0 ? 1 : 0;
    switch(
$pattern)
    {
        case 
'G':
        case 
'GG':
        case 
'GGG':
            return 
$this->_locale->getEraName($era,'abbreviated');
        case 
'GGGG':
            return 
$this->_locale->getEraName($era,'wide');
        case 
'GGGGG':
            return 
$this->_locale->getEraName($era,'narrow');
        default:
            throw new 
CException(Yii::t('yii','The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".'));
    }
}

Возвращает эру. В григорианском календаре, год > 0 - это н. э., иначе - до н. э.

formatHour12() метод

protected string formatHour12(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} string часы в 12-часовом формате.
Исходный код: framework/i18n/CDateFormatter.php#395 (показать)
protected function formatHour12($pattern,$date)
{
    
$hour=$date['hours'];
    
$hour=($hour==12|$hour==0)?12:($hour)%12;
    if(
$pattern==='h')
        return 
$hour;
    elseif(
$pattern==='hh')
        return 
str_pad($hour,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for 12 hour format must be "h" or "hh".'));
}

Возвращает часы в 12-часовом формате, т.е. [1-12]. "h" для беззаполнения, "hh" всегда возвращает 2 символа.

formatHour24() метод

protected string formatHour24(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} string часы в 24-часовом формате.
Исходный код: framework/i18n/CDateFormatter.php#376 (показать)
protected function formatHour24($pattern,$date)
{
    
$hour=$date['hours'];
    if(
$pattern==='H')
        return 
$hour;
    elseif(
$pattern==='HH')
        return 
str_pad($hour,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for 24 hour format must be "H" or "HH".'));
}

Возвращает часы в 24-часовом формате, т.е. [0-23]. "H" для беззаполнения, "HH" всегда возвращает 2 символа.

formatHourInDay() метод

protected integer formatHourInDay(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} integer часы [1-24]
Исходный код: framework/i18n/CDateFormatter.php#415 (показать)
protected function formatHourInDay($pattern,$date)
{
    
$hour=$date['hours']==0?24:$date['hours'];
    if(
$pattern==='k')
        return 
$hour;
    elseif(
$pattern==='kk')
        return 
str_pad($hour,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for hour in day must be "k" or "kk".'));
}

Возвращает часы [1-24]. 'k' для беззаполнения, 'kk' с заполнением двумя символами.

formatHourInPeriod() метод

protected integer formatHourInPeriod(string $pattern, array $date)
$pattern string шаблон.
$date array результат CTimestamp::getdate.
{return} integer часы в формате AM/PM.
Исходный код: framework/i18n/CDateFormatter.php#434 (показать)
protected function formatHourInPeriod($pattern,$date)
{
    
$hour=$date['hours']%12;
    if(
$pattern==='K')
        return 
$hour;
    elseif(
$pattern==='KK')
        return 
str_pad($hour,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for hour in AM/PM must be "K" or "KK".'));
}

Получить часы в формате AM/PM, например [0-11] "K" без заполнения, "KK" всегда вернёт 2 символа.

formatMinutes() метод

protected string formatMinutes(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка минуты.
Исходный код: framework/i18n/CDateFormatter.php#453 (показать)
protected function formatMinutes($pattern,$date)
{
    
$minutes=$date['minutes'];
    if(
$pattern==='m')
        return 
$minutes;
    elseif(
$pattern==='mm')
        return 
str_pad($minutes,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for minutes must be "m" or "mm".'));
}

Получить минуты. "m" без заполнения, "mm" всегда вернёт 2 символа.

formatMonth() метод

protected string formatMonth(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка название месяца
Исходный код: framework/i18n/CDateFormatter.php#225 (показать)
protected function formatMonth($pattern,$date)
{
    
$month=$date['mon'];
    switch(
$pattern)
    {
        case 
'M':
            return 
$month;
        case 
'MM':
            return 
str_pad($month,2,'0',STR_PAD_LEFT);
        case 
'MMM':
            return 
$this->_locale->getMonthName($month,'abbreviated');
        case 
'MMMM':
            return 
$this->_locale->getMonthName($month,'wide');
        case 
'MMMMM':
            return 
$this->_locale->getMonthName($month,'narrow');
        case 
'L':
            return 
$month;
        case 
'LL':
            return 
str_pad($month,2,'0',STR_PAD_LEFT);
        case 
'LLL':
            return 
$this->_locale->getMonthName($month,'abbreviated', true);
        case 
'LLLL':
            return 
$this->_locale->getMonthName($month,'wide', true);
        case 
'LLLLL':
            return 
$this->_locale->getMonthName($month,'narrow', true);
        default:
            throw new 
CException(Yii::t('yii','The pattern for month must be "M", "MM", "MMM", "MMMM", "L", "LL", "LLL" or "LLLL".'));
    }
}

Получить номер месяца. "M" вернёт целое число от 1 до 12; "MM" вернёт двузначный номер месяца с нулевым заполнением, например 05; "MMM" вернёт сокращённое название месяца, например "Янв"; "MMMM" вернёт полное название месяца, например "Январь"; "MMMMM" вернёт укороченное название месяца, например "Я";

formatPeriod() метод

protected string formatPeriod(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка обозначение AM или PM
Исходный код: framework/i18n/CDateFormatter.php#355 (показать)
protected function formatPeriod($pattern,$date)
{
    if(
$pattern==='a')
    {
        if(
intval($date['hours']/12))
            return 
$this->_locale->getPMName();
        else
            return 
$this->_locale->getAMName();
    }
    else
        throw new 
CException(Yii::t('yii','The pattern for AM/PM marker must be "a".'));
}

Получить обозначение AM/PM, полдень - PM, полночь - AM.

formatSeconds() метод

protected string formatSeconds(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка секунды
Исходный код: framework/i18n/CDateFormatter.php#472 (показать)
protected function formatSeconds($pattern,$date)
{
    
$seconds=$date['seconds'];
    if(
$pattern==='s')
        return 
$seconds;
    elseif(
$pattern==='ss')
        return 
str_pad($seconds,2,'0',STR_PAD_LEFT);
    else
        throw new 
CException(Yii::t('yii','The pattern for seconds must be "s" or "ss".'));
}

Получить секунды. "s" без заполнения, "ss" всегда вернёт 2 символа.

formatTimeZone() метод

protected string formatTimeZone(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка часовой пояс
Исходный код: framework/i18n/CDateFormatter.php#524 (показать)
protected function formatTimeZone($pattern,$date)
{
    if(
$pattern[0]==='z' || $pattern[0]==='v')
        return @
date('T', @mktime($date['hours'], $date['minutes'], $date['seconds'], $date['mon'], $date['mday'], $date['year']));
    elseif(
$pattern[0]==='Z')
        return @
date('P', @mktime($date['hours'], $date['minutes'], $date['seconds'], $date['mon'], $date['mday'], $date['year']));
    else
        throw new 
CException(Yii::t('yii','The pattern for time zone must be "z" or "v".'));
}

Получить часовой пояс сервера.

formatWeekInMonth() метод

protected integer formatWeekInMonth(array $pattern, string $date)
$pattern массив результат CTimestamp::getdate.
$date строка шаблон.
{return} целое число неделя месяца
Исходный код: framework/i18n/CDateFormatter.php#505 (показать)
protected function formatWeekInMonth($pattern,$date)
{
    if(
$pattern==='W')
    {
        
$weekDay=date('N',mktime(0,0,0,$date['mon'],1,$date['year']));
        return 
floor(($weekDay+$date['mday']-2)/7)+1;
    }
    else
        throw new 
CException(Yii::t('yii','The pattern for week in month must be "W".'));
}

Получить номер недели в месяце.

formatWeekInYear() метод

protected integer formatWeekInYear(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} целое число неделя года
Исходный код: framework/i18n/CDateFormatter.php#490 (показать)
protected function formatWeekInYear($pattern,$date)
{
    if(
$pattern==='w')
        return @
date('W',@mktime(0,0,0,$date['mon'],$date['mday'],$date['year']));
    else
        throw new 
CException(Yii::t('yii','The pattern for week in year must be "w".'));
}

Получить номер недели в году.

formatYear() метод

protected string formatYear(string $pattern, array $date)
$pattern строка шаблон.
$date массив результат CTimestamp::getdate.
{return} строка отформатированный год
Исходный код: framework/i18n/CDateFormatter.php#204 (показать)
protected function formatYear($pattern,$date)
{
    
$year=$date['year'];
    if(
$pattern==='yy')
        return 
str_pad($year%100,2,'0',STR_PAD_LEFT);
    else
        return 
str_pad($year,strlen($pattern),'0',STR_PAD_LEFT);
}

Получить год. "yy" вернёт последние две цифры года. "y...y" добавит нули в начале года, например "yyyyy" сгенерирует "02008" для года 2008.

parseFormat() метод

protected array parseFormat(string $pattern)
$pattern строка шаблон для разбора
{return} массив результат разбора
Исходный код: framework/i18n/CDateFormatter.php#142 (показать)
protected function parseFormat($pattern)
{
    static 
$formats=array();  // cache
    
if(isset($formats[$pattern]))
        return 
$formats[$pattern];
    
$tokens=array();
    
$n=strlen($pattern);
    
$isLiteral=false;
    
$literal='';
    for(
$i=0;$i<$n;++$i)
    {
        
$c=$pattern[$i];
        if(
$c==="'")
        {
            if(
$i<$n-1 && $pattern[$i+1]==="'")
            {
                
$tokens[]="'";
                
$i++;
            }
            elseif(
$isLiteral)
            {
                
$tokens[]=$literal;
                
$literal='';
                
$isLiteral=false;
            }
            else
            {
                
$isLiteral=true;
                
$literal='';
            }
        }
        elseif(
$isLiteral)
            
$literal.=$c;
        else
        {
            for(
$j=$i+1;$j<$n;++$j)
            {
                if(
$pattern[$j]!==$c)
                    break;
            }
            
$p=str_repeat($c,$j-$i);
            if(isset(
self::$_formatters[$c]))
                
$tokens[]=array(self::$_formatters[$c],$p);
            else
                
$tokens[]=$p;
            
$i=$j-1;
        }
    }
    if(
$literal!=='')
        
$tokens[]=$literal;

    return 
$formats[$pattern]=$tokens;
}

Разбирает шаблон формата даты и времени.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDateFormatter

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API