Package | system.i18n |
---|---|
Inheritance | class CDateFormatter » CComponent |
Since | 1.0 |
Version | $Id$ |
Source Code | framework/i18n/CDateFormatter.php |
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CDateFormatter |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__unset() | Sets a component property to be null. | CComponent |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
format() | Formats a date according to a customized pattern. | CDateFormatter |
formatDateTime() | Formats a date according to a predefined pattern. | CDateFormatter |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
raiseEvent() | Raises an event. | CComponent |
Method | Description | Defined By |
---|---|---|
formatDay() | Get the day of the month. | CDateFormatter |
formatDayInMonth() | Get day of week in the month, e.g. 2nd Wed in July. | CDateFormatter |
formatDayInWeek() | Get the day of the week. | CDateFormatter |
formatDayInYear() | Get the day in the year, e.g. [1-366] | CDateFormatter |
formatEra() | Get the era. i.e. in gregorian, year > 0 is AD, else BC. | CDateFormatter |
formatHour12() | Get the hours in 12 hour format, i.e., [1-12] | CDateFormatter |
formatHour24() | Get the hours in 24 hour format, i.e. [0-23]. | CDateFormatter |
formatHourInDay() | Get the hours [1-24]. | CDateFormatter |
formatHourInPeriod() | Get the hours in AM/PM format, e.g [0-11] | CDateFormatter |
formatMinutes() | Get the minutes. | CDateFormatter |
formatMonth() | Get the month. | CDateFormatter |
formatPeriod() | Get the AM/PM designator, 12 noon is PM, 12 midnight is AM. | CDateFormatter |
formatSeconds() | Get the seconds. | CDateFormatter |
formatTimeZone() | Get the timezone of the server machine. | CDateFormatter |
formatWeekInMonth() | Get week in the month. | CDateFormatter |
formatWeekInYear() | Get the week in the year. | CDateFormatter |
formatYear() | Get the year. | CDateFormatter |
parseFormat() | Parses the datetime format pattern. | CDateFormatter |
public void __construct(mixed $locale)
| ||
$locale | mixed | locale ID (string) or CLocale instance |
public function __construct($locale)
{
if(is_string($locale))
$this->_locale=CLocale::getInstance($locale);
else
$this->_locale=$locale;
}
Constructor.
public string format(string $pattern, mixed $time)
| ||
$pattern | string | the pattern (See https://www.unicode.org/reports/tr35/#Date_Format_Patterns) |
$time | mixed | UNIX timestamp or a string in strtotime format |
{return} | string | formatted date time. |
public function format($pattern,$time)
{
if(is_string($time))
{
if(ctype_digit($time))
$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);
}
Formats a date according to a customized pattern.
public string formatDateTime(mixed $timestamp, string $dateWidth='medium', string $timeWidth='medium')
| ||
$timestamp | mixed | UNIX timestamp or a string in strtotime format |
$dateWidth | string | width of the date pattern. It can be 'full', 'long', 'medium' and 'short'. If null, it means the date portion will NOT appear in the formatting result |
$timeWidth | string | width of the time pattern. It can be 'full', 'long', 'medium' and 'short'. If null, it means the time portion will NOT appear in the formatting result |
{return} | string | formatted date time. |
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));
}
else if(isset($date))
return $date;
else if(isset($time))
return $time;
}
Formats a date according to a predefined pattern. The predefined pattern is determined based on the date pattern width and time pattern width.
protected string formatDay(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | day of the month |
protected function formatDay($pattern,$date)
{
$day=$date['mday'];
if($pattern==='d')
return $day;
else if($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".'));
}
Get the day of the month. "d" for non-padding, "dd" will always return 2 digits day numbers, e.g. 05.
protected int formatDayInMonth(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | int | day in month |
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".'));
}
Get day of week in the month, e.g. 2nd Wed in July.
protected string formatDayInWeek(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | day of the week. |
protected function formatDayInWeek($pattern,$date)
{
$day=$date['wday'];
switch($pattern)
{
case 'E':
case 'EE':
case 'EEE':
return $this->_locale->getWeekDayName($day,'abbreviated');
case 'EEEE':
return $this->_locale->getWeekDayName($day,'wide');
case 'EEEEE':
return $this->_locale->getWeekDayName($day,'narrow');
default:
throw new CException(Yii::t('yii','The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".'));
}
}
Get the day of the week. "E", "EE", "EEE" will return abbreviated week day name, e.g. "Tues"; "EEEE" will return full week day name; "EEEEE" will return the narrow week day name, e.g. "T";
protected int formatDayInYear(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | int | hours in AM/PM format. |
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".'));
}
Get the day in the year, e.g. [1-366]
protected string formatEra(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | era |
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".'));
}
}
Get the era. i.e. in gregorian, year > 0 is AD, else BC.
protected string formatHour12(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | hours in 12 hour format. |
protected function formatHour12($pattern,$date)
{
$hour=$date['hours'];
$hour=($hour==12|$hour==0)?12:($hour)%12;
if($pattern==='h')
return $hour;
else if($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".'));
}
Get the hours in 12 hour format, i.e., [1-12] "h" for non-padding, "hh" will always return 2 characters.
protected string formatHour24(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | hours in 24 hour format. |
protected function formatHour24($pattern,$date)
{
$hour=$date['hours'];
if($pattern==='H')
return $hour;
else if($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".'));
}
Get the hours in 24 hour format, i.e. [0-23]. "H" for non-padding, "HH" will always return 2 characters.
protected int formatHourInDay(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | int | hours [1-24] |
protected function formatHourInDay($pattern,$date)
{
$hour=$date['hours']==0?24:$date['hours'];
if($pattern==='k')
return $hour;
else if($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".'));
}
Get the hours [1-24]. 'k' for non-padding, and 'kk' with 2 characters padding.
protected int formatHourInPeriod(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | int | hours in AM/PM format. |
protected function formatHourInPeriod($pattern,$date)
{
$hour=$date['hours']%12;
if($pattern==='K')
return $hour;
else if($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".'));
}
Get the hours in AM/PM format, e.g [0-11] "K" for non-padding, "KK" will always return 2 characters.
protected string formatMinutes(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | minutes. |
protected function formatMinutes($pattern,$date)
{
$minutes=$date['minutes'];
if($pattern==='m')
return $minutes;
else if($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".'));
}
Get the minutes. "m" for non-padding, "mm" will always return 2 characters.
protected string formatMonth(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | month name |
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');
default:
throw new CException(Yii::t('yii','The pattern for month must be "M", "MM", "MMM", or "MMMM".'));
}
}
Get the month. "M" will return integer 1 through 12; "MM" will return two digits month number with necessary zero padding, e.g. 05; "MMM" will return the abrreviated month name, e.g. "Jan"; "MMMM" will return the full month name, e.g. "January"; "MMMMM" will return the narrow month name, e.g. "J";
protected string formatPeriod(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | AM or PM designator |
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".'));
}
Get the AM/PM designator, 12 noon is PM, 12 midnight is AM.
protected string formatSeconds(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | seconds |
protected function formatSeconds($pattern,$date)
{
$seconds=$date['seconds'];
if($pattern==='s')
return $seconds;
else if($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".'));
}
Get the seconds. "s" for non-padding, "ss" will always return 2 characters.
protected string formatTimeZone(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | time zone |
protected function formatTimeZone($pattern,$date)
{
if($pattern==='z' | $pattern==='v')
return @date('T', @mktime($date['hours'], $date['minutes'], $date['seconds'], $date['mon'], $date['mday'], $date['year']));
elseif($pattern==='Z')
return @date('O', @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".'));
}
Get the timezone of the server machine.
protected int formatWeekInMonth(array $pattern, string $date)
| ||
$pattern | array | result of CTimestamp::getdate. |
$date | string | a pattern. |
{return} | int | week in month |
protected function formatWeekInMonth($pattern,$date)
{
if($pattern==='W')
return @date('W',@mktime(0,0,0,$date['mon'], $date['mday'],$date['year']))-date('W', mktime(0,0,0,$date['mon'],1,$date['year']))+1;
else
throw new CException(Yii::t('yii','The pattern for week in month must be "W".'));
}
Get week in the month.
protected int formatWeekInYear(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | int | week in year |
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".'));
}
Get the week in the year.
protected string formatYear(string $pattern, array $date)
| ||
$pattern | string | a pattern. |
$date | array | result of CTimestamp::getdate. |
{return} | string | formatted year |
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);
}
Get the year. "yy" will return the last two digits of year. "y...y" will pad the year with 0 in the front, e.g. "yyyyy" will generate "02008" for year 2008.
protected array parseFormat(string $pattern)
| ||
$pattern | string | the pattern to be parsed |
{return} | array | tokenized parsing result |
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++;
}
else if($isLiteral)
{
$tokens[]=$literal;
$literal='';
$isLiteral=false;
}
else
{
$isLiteral=true;
$literal='';
}
}
else if($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;
}
Parses the datetime format pattern.
Signup or Login in order to comment.