CDateFormatter
| Пакет | system.i18n |
|---|---|
| Наследование | class CDateFormatter » CComponent |
| С версии | 1.0 |
| Исходный код | framework/i18n/CDateFormatter.php |
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 |
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) |
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 | отформатированная дата и время. |
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 | день месяца |
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 | день месяца |
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-я среда июля.
formatDayInWeek() метод
protected string formatDayInWeek(string $pattern, array $date) | ||
| $pattern | string | шаблон. |
| $date | array | результат CTimestamp::getdate. |
| {return} | string | день недели. |
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" вернет укороченное название дня недели, например, "В";
formatDayInYear() метод
protected integer formatDayInYear(string $pattern, array $date) | ||
| $pattern | string | шаблон. |
| $date | array | результат CTimestamp::getdate. |
| {return} | integer | часы в формате AM/PM. |
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 | эра |
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-часовом формате. |
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-часовом формате. |
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] |
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. |
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} | строка | минуты. |
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} | строка | название месяца |
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 |
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} | строка | секунды |
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} | строка | часовой пояс |
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} | целое число | неделя месяца |
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} | целое число | неделя года |
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} | строка | отформатированный год |
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} | массив | результат разбора |
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