예제 #1
0
 /**
  * Format a date according to the pattern.
  * @param mixed the time as integer or string in strtotime format.
  * @return string formatted date time.
  */
 public function format($time, $pattern = 'F', $charset = 'UTF-8')
 {
     if (is_numeric($time)) {
         //assumes unix epoch
         $time = floatval($time);
     } else {
         if (is_string($time)) {
             $time = @strtotime($time);
         }
     }
     if ($pattern === null) {
         $pattern = 'F';
     }
     $s = Prado::createComponent('System.Util.TDateTimeStamp');
     $date = $s->getDate($time);
     $pattern = $this->getPattern($pattern);
     $tokens = $this->getTokens($pattern);
     for ($i = 0, $k = count($tokens); $i < $k; ++$i) {
         $pattern = $tokens[$i];
         if ($pattern[0] == "'" && $pattern[strlen($pattern) - 1] == "'") {
             $sub = preg_replace('/(^\')|(\'$)/', '', $pattern);
             $tokens[$i] = str_replace('``````', '\'', $sub);
         } else {
             if ($pattern == '``````') {
                 $tokens[$i] = '\'';
             } else {
                 $function = $this->getFunctionName($pattern);
                 if ($function != null) {
                     $fName = 'get' . $function;
                     if (in_array($fName, $this->methods)) {
                         $rs = $this->{$fName}($date, $pattern);
                         $tokens[$i] = $rs;
                     } else {
                         throw new Exception('function ' . $function . ' not found.');
                     }
                 }
             }
         }
     }
     return I18N_toEncoding(implode('', $tokens), $charset);
 }
 /**
  * Formats a date according to the pattern.
  *
  * @param mixed the time as integer or string in strtotime format.
  * @return string formatted date time. 
  */
 public function format($time, $pattern = 'F', $inputPattern = null, $charset = 'UTF-8')
 {
     $date = $this->getDate($time, $inputPattern);
     if (is_null($pattern)) {
         $pattern = 'F';
     }
     $pattern = $this->getPattern($pattern);
     $tokens = $this->getTokens($pattern);
     for ($i = 0, $max = count($tokens); $i < $max; $i++) {
         $pattern = $tokens[$i];
         if ($pattern[0] == "'" && $pattern[strlen($pattern) - 1] == "'") {
             $tokens[$i] = str_replace('``````', '\'', preg_replace('/(^\')|(\'$)/', '', $pattern));
         } else {
             if ($pattern == '``````') {
                 $tokens[$i] = '\'';
             } else {
                 $function = ucfirst($this->getFunctionName($pattern));
                 if ($function != null) {
                     $fName = 'get' . $function;
                     if (in_array($fName, $this->methods)) {
                         $tokens[$i] = $this->{$fName}($date, $pattern);
                     } else {
                         throw new sfException(sprintf('Function %s not found.', $function));
                     }
                 }
             }
         }
     }
     return I18N_toEncoding(implode('', $tokens), $charset);
 }
예제 #3
0
 /**
  * For the number for a certain pattern. The valid patterns are
  * 'c', 'd', 'e', 'p' or a custom pattern, such as "#.000" for
  * 3 decimal places.
  * @param mixed the number to format.
  * @param string the format pattern, either, 'c', 'd', 'e', 'p'
  * or a custom pattern. E.g. "#.000" will format the number to
  * 3 decimal places.
  * @param string 3-letter ISO 4217 code. For example, the code
  * "USD" represents the US Dollar and "EUR" represents the Euro currency.
  * @return string formatted number string
  */
 function format($number, $pattern = 'd', $currency = 'USD', $charset = 'UTF-8')
 {
     $oldLocale = setLocale(LC_NUMERIC, '0');
     setlocale(LC_NUMERIC, 'C');
     $this->setPattern($pattern);
     if (strtolower($pattern) == 'p') {
         $number = $number * 100;
     }
     $string = (string) $number;
     $decimal = $this->formatDecimal($string);
     $integer = $this->formatInteger(abs($number));
     if (strlen($decimal) > 0) {
         $result = $integer . $decimal;
     } else {
         $result = $integer;
     }
     //get the suffix
     if ($number >= 0) {
         $suffix = $this->formatInfo->PositivePattern;
     } else {
         if ($number < 0) {
             $suffix = $this->formatInfo->NegativePattern;
         } else {
             $suffix = array("", "");
         }
     }
     //append and prepend suffix
     $result = $suffix[0] . $result . $suffix[1];
     //replace currency sign
     $symbol = @$this->formatInfo->getCurrencySymbol($currency);
     if ($symbol === null) {
         $symbol = $currency;
     }
     $result = str_replace('¤', $symbol, $result);
     setlocale(LC_NUMERIC, $oldLocale);
     return I18N_toEncoding($result, $charset);
 }
예제 #4
0
 public function formatExists($string, $args = array(), $catalogue = null, $charset = null)
 {
     if (empty($charset)) {
         $charset = $this->getCharset();
     }
     $s = $this->getFormattedString(I18N_toUTF8($string, $charset), $args, $catalogue);
     return I18N_toEncoding($s, $charset);
 }
 /**
  * Formats the number for a certain pattern. The valid patterns are
  * 'c', 'd', 'e', 'p' or a custom pattern, such as "#.000" for
  * 3 decimal places.
  *
  * @param mixed the number to format.
  * @param string the format pattern, either, 'c', 'd', 'e', 'p'
  * or a custom pattern. E.g. "#.000" will format the number to 
  * 3 decimal places.
  * @param string 3-letter ISO 4217 code. For example, the code 
  * "USD" represents the US Dollar and "EUR" represents the Euro currency.
  * @return string formatted number string 
  */
 function format($number, $pattern = 'd', $currency = 'USD', $charset = 'UTF-8')
 {
     $this->setPattern($pattern);
     if (strtolower($pattern) == 'p') {
         $number = $number * 100;
     }
     // avoid conversion with exponents
     // see http://trac.symfony-project.org/ticket/5715
     $precision = ini_set('precision', 14);
     $string = $this->fixFloat($number);
     ini_set('precision', $precision);
     list($number, $decimal) = $this->formatDecimal($string);
     $integer = $this->formatInteger($this->fixFloat(abs($number)));
     $result = strlen($decimal) > 0 ? $integer . $decimal : $integer;
     // get the suffix
     if ($number >= 0) {
         $suffix = $this->formatInfo->PositivePattern;
     } else {
         if ($number < 0) {
             $suffix = $this->formatInfo->NegativePattern;
         } else {
             $suffix = array('', '');
         }
     }
     // append and prepend suffix
     $result = $suffix[0] . $result . $suffix[1];
     // replace currency sign
     $symbol = @$this->formatInfo->getCurrencySymbol($currency);
     if (is_null($symbol)) {
         $symbol = $currency;
     }
     $result = str_replace('¤', $symbol, $result);
     return I18N_toEncoding($result, $charset);
 }
예제 #6
0
 /**
  * For the number for a certain pattern. The valid patterns are
  * 'c', 'd', 'e', 'p' or a custom pattern, such as "#.000" for
  * 3 decimal places.
  *
  * @param mixed the number to format.
  * @param string the format pattern, either, 'c', 'd', 'e', 'p'
  * or a custom pattern. E.g. "#.000" will format the number to 
  * 3 decimal places.
  * @param string 3-letter ISO 4217 code. For example, the code 
  * "USD" represents the US Dollar and "EUR" represents the Euro currency.
  * @return string formatted number string 
  */
 function format($number, $pattern = 'd', $currency = 'USD', $charset = 'UTF-8')
 {
     $this->setPattern($pattern);
     if (strtolower($pattern) == 'p') {
         $number = $number * 100;
     }
     $string = (string) $number;
     list($number, $decimal) = $this->formatDecimal($string);
     $integer = $this->formatInteger(abs($number));
     $result = strlen($decimal) > 0 ? $integer . $decimal : $integer;
     // get the suffix
     if ($number >= 0) {
         $suffix = $this->formatInfo->PositivePattern;
     } else {
         if ($number < 0) {
             $suffix = $this->formatInfo->NegativePattern;
         } else {
             $suffix = array('', '');
         }
     }
     // append and prepend suffix
     $result = $suffix[0] . $result . $suffix[1];
     // replace currency sign
     $symbol = @$this->formatInfo->getCurrencySymbol($currency);
     if (is_null($symbol)) {
         $symbol = $currency;
     }
     $result = str_replace('¤', $symbol, $result);
     return I18N_toEncoding($result, $charset);
 }
예제 #7
0
 /**
  * Format the string. That is, for a particular string find
  * the corresponding translation. Variable subsitution is performed
  * for the $args parameter. A different catalogue can be specified
  * using the $catalogue parameter.
  * The output charset is determined by $this->getCharset();
  * @param string the string to translate.
  * @param array a list of string to substitute.
  * @param string get the translation from a particular message
  * @param string charset, the input AND output charset
  * catalogue.
  * @return string translated string.
  */
 public function format($string, $args = array(), $catalogue = null, $charset = null)
 {
     if (empty($charset)) {
         $charset = $this->getCharset();
     }
     //force args as UTF-8
     foreach ($args as $k => $v) {
         $args[$k] = I18N_toUTF8($v, $charset);
     }
     $s = $this->formatString(I18N_toUTF8($string, $charset), $args, $catalogue);
     return I18N_toEncoding($s, $charset);
 }
예제 #8
0
 /**
  * Format a date according to the pattern.
  * @param mixed the time as integer or string in strtotime format.
  * @return string formatted date time. 
  */
 public function format($time, $pattern = 'F', $charset = 'UTF-8')
 {
     if (is_string($time)) {
         $time = strtotime($time);
     }
     if (is_null($pattern)) {
         $pattern = 'F';
     }
     $date = getdate($time);
     $pattern = $this->getPattern($pattern);
     $tokens = $this->getTokens($pattern);
     for ($i = 0; $i < count($tokens); $i++) {
         $pattern = $tokens[$i];
         if ($pattern[0] == "'" && $pattern[strlen($pattern) - 1] == "'") {
             $tokens[$i] = preg_replace('/(^\')|(\'$)/', '', $pattern);
         } else {
             $function = $this->getFunctionName($pattern);
             if ($function != null) {
                 $fName = 'get' . $function;
                 if (in_array($fName, $this->methods)) {
                     $rs = $this->{$fName}($date, $pattern);
                     $tokens[$i] = $rs;
                 } else {
                     throw new Exception('function ' . $function . ' not found.');
                 }
             }
         }
     }
     return I18N_toEncoding(implode('', $tokens), $charset);
 }