|
Server IP : 10.2.73.233 / Your IP : 216.73.216.223 Web Server : Apache/2.4.59 (Debian) System : Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : www-data ( 33) PHP Version : 5.6.40-64+0~20230107.71+debian10~1.gbp673146 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/ifk/web.back/framework/3rdParty/../I18N/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
/**
* TDateFromat formatting component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2014 PradoSoft
* @license http://www.pradosoft.com/license/
* @package System.I18N
*/
/**
* Get the DateFormat class.
*/
Prado::using('System.I18N.core.DateFormat');
/**
* Get the parent control class.
*/
Prado::using('System.I18N.TI18NControl');
/**
* To format dates and/or time according to the current locale use
* <code>
* <com:TDateFormat Pattern="dd:MMM:yyyy" Value="01/01/2001" />
*</code>
* The date will be formatted according to the current locale (or culture)
* using the format specified by 'Pattern' attribute.
*
* To format date and/or time for a locale (e.g. de_DE) include a Culture
* attribute, for example:
* <code>
* <com:TDateFormat Culture="de_DE" Value="01/01/2001 12:00" />
* </code>
* The date will be formatted according to this format.
*
* If no Pattern was specified then the date will be formatted with the
* default format (both date and time). If no value for the date is specified
* then the current date will be used. E.g.: <code><com:TDateFormat /></code>
* will result in the current date, formatted with default localized pattern.
*
* Namespace: System.I18N
*
* Properties
* - <b>Value</b>, date,
* <br>Gets or sets the date to format. The tag content is used as Value
* if the Value property is not specified.
* - <b>Pattern</b>, string,
* <br>Gets or sets the formatting pattern. The predefined patterns are
* 'fulldate', 'longdate', 'mediumdate', 'shortdate', 'fulltime',
* 'longtime', 'mediumtime', and 'shorttime'. Custom patterns can specified
* when the Pattern property does not match the predefined patterns.
* - <b>DefaultText</b>, string,
* <br>Gets or sets the default text. If Value is not set, DefaultText will be
* shown instead of todays date and time.
*
* @author Xiang Wei Zhuo <weizhuo[at]gmail[dot]com>
* @version v1.0, last update on Sat Dec 11 15:25:11 EST 2004
* @package System.I18N
*/
class TDateFormat extends TI18NControl implements IDataRenderer
{
/**
* Default DateFormat, set to the application culture.
* @var DateFormat
*/
protected static $formatter;
/**
* A set of pattern presets and their respective formatting shorthand.
* @var array
*/
static private $_patternPresets = array(
'fulldate'=>'P','full'=>'P',
'longdate'=>'D','long'=>'d',
'mediumdate'=>'p','medium'=>'p',
'shortdate'=>'d','short'=>'d',
'fulltime'=>'Q', 'longtime'=>'T',
'mediumtime'=>'q', 'shorttime'=>'t');
/**
* Sets the date time formatting pattern.
* @param string format pattern.
*/
public function setPattern($value)
{
$this->setViewState('Pattern',$value,'');
}
/**
* Gets the date time format pattern.
* @return string format pattern.
*/
public function getPattern()
{
$string = $this->getViewState('Pattern','');
$pattern = null;
//try the subpattern of "date time" presets
$subpatterns = explode(' ',$string,2);
$datetime = array();
if(count($subpatterns)==2)
{
$datetime[] = $this->getPreset($subpatterns[0]);
$datetime[] = $this->getPreset($subpatterns[1]);
}
//we have a good subpattern
if(count($datetime) == 2
&& strlen($datetime[0]) == 1
&& strlen($datetime[1]) == 1)
{
$pattern = $datetime;
}
else //no subpattern, try the presets
$pattern = $this->getPreset($string);
//no presets found, use the string as the pattern
//and let the DateFormat handle it.
if($pattern===null)
$pattern = $string;
if (!is_array($pattern) && strlen($pattern) == 0)
$pattern = null;
return $pattern;
}
/**
* For a given string, try and find a preset pattern.
* @param string the preset pattern name
* @return string a preset pattern if found, null otherwise.
*/
protected function getPreset($string)
{
$string = strtolower($string);
foreach(self::$_patternPresets as $pattern => $preset)
{
if($string == $pattern)
return $preset;
}
}
/**
* Get the date-time value for this control.
* @return string date time value.
*/
public function getValue()
{
$value = $this->getViewState('Value','');
if(empty($value))
{
$defaultText = $this->getDefaultText();
if(empty($defaultText))
return time();
}
return $value;
}
/**
* Set the date-time value for this control.
* @param string the date-time value.
*/
public function setValue($value)
{
$this->setViewState('Value',$value,'');
}
/**
* Get the default text value for this control.
* @return string default text value
*/
public function getDefaultText()
{
return $this->getViewState('DefaultText','');
}
/**
* Set the default text value for this control.
* @param string default text value
*/
public function setDefaultText($value)
{
$this->setViewState('DefaultText',$value,'');
}
/**
* Get the date-time value for this control.
* This method is required by {@link IDataRenderer}.
* It is the same as {@link getValue()}.
* @return string date time value.
* @see getValue
* @since 3.1.2
*/
public function getData()
{
return $this->getValue();
}
/**
* Set the date-time value for this control.
* This method is required by {@link IDataRenderer}.
* It is the same as {@link setValue()}.
* @param string the date-time value.
* @see setValue
* @since 3.1.2
*/
public function setData($value)
{
$this->setValue($value);
}
/**
* Renders the localized version of the date-time value.
* If the culture is not specified, the default application
* culture will be used.
* This method overrides parent's implementation.
*/
protected function getFormattedDate()
{
$value = $this->getValue();
$defaultText = $this->getDefaultText();
if(empty($value) && !empty($defaultText))
return $this->getDefaultText();
$app = $this->getApplication()->getGlobalization();
//initialized the default class wide formatter
if(self::$formatter===null)
self::$formatter = new DateFormat($app->getCulture());
$culture = $this->getCulture();
//return the specific cultural formatted date time
if(strlen($culture) && $app->getCulture() !== $culture)
{
$formatter = new DateFormat($culture);
return $formatter->format($value,
$this->getPattern(),
$this->getCharset());
}
//return the application wide culture formatted date time.
$result = self::$formatter->format($value,
$this->getPattern(),
$this->getCharset());
return $result;
}
public function render($writer)
{
$writer->write($this->getFormattedDate());
}
}