/** * Convert a value in a pre-defined format to a PHP string * * @param mixed $value Value to format * @param string $format Format code * @return string Formatted string */ public static function toFormattedString($value = '', $format = '') { if (!is_numeric($value)) { return $value; } if (preg_match("/^[hmsdy]/i", $format)) { // custom datetime format // dvc: convert Excel formats to PHP date formats // first remove escapes related to non-format characters // OpenOffice.org uses upper-case number formats, e.g. 'YYYY', convert to lower-case $format = strtolower($format); $format = str_replace('\\', '', $format); // 4-digit year $format = str_replace('yyyy', 'Y', $format); // 2-digit year $format = str_replace('yy', 'y', $format); // first letter of month - no php equivalent $format = str_replace('mmmmm', 'M', $format); // full month name $format = str_replace('mmmm', 'F', $format); // short month name $format = str_replace('mmm', 'M', $format); // mm is minutes if time or month w/leading zero $format = str_replace(':mm', ':i', $format); // tmp place holder $format = str_replace('mm', 'x', $format); // month no leading zero $format = str_replace('m', 'n', $format); // month leading zero $format = str_replace('x', 'm', $format); // 12-hour suffix $format = str_replace('am/pm', 'A', $format); // tmp place holder $format = str_replace('dd', 'x', $format); // days no leading zero $format = str_replace('d', 'j', $format); // days leading zero $format = str_replace('x', 'd', $format); // seconds $format = str_replace('ss', 's', $format); // fractional seconds - no php equivalent $format = str_replace('.s', '', $format); if (!strpos($format, 'A')) { // 24-hour format $format = str_replace('h', 'H', $format); } // user defined flag symbol???? $format = str_replace(';@', '', $format); if (is_float($value)) { return date($format, PHPExcel_Shared_Date::ExceltoPHP($value)); } return date($format, $value); } else { if (preg_match('/%$/', $format)) { // % number format if (preg_match('/\\.[#0]+/i', $format, $m)) { $s = substr($m[0], 0, 1) . (strlen($m[0]) - 1); $format = str_replace($m[0], $s, $format); } if (preg_match('/^[#0]+/', $format, $m)) { $format = str_replace($m[0], strlen($m[0]), $format); } $format = '%' . str_replace('%', "f%%", $format); return sprintf($format, $value); } else { if (preg_match("/^([0-9.,-]+)\$/", $value)) { if ($format === self::FORMAT_NUMBER) { return sprintf('%1.0f', $value); } else { if ($format === self::FORMAT_NUMBER_00) { return sprintf('%1.2f', $value); } else { if ($format === self::FORMAT_NUMBER_COMMA_SEPARATED1 || $format === self::FORMAT_NUMBER_COMMA_SEPARATED2) { return number_format($value, 2, ',', '.'); } else { if ($format === self::FORMAT_PERCENTAGE) { return round(100 * $value, 0) . '%'; } else { if ($format === self::FORMAT_PERCENTAGE_00) { return round(100 * $value, 2) . '%'; } else { if ($format === self::FORMAT_DATE_YYYYMMDD || $format === self::FORMAT_DATE_YYYYMMDD2) { return date('Y-m-d', 1 * $value); } else { if ($format === self::FORMAT_DATE_DDMMYYYY) { return date('d/m/Y', 1 * $value); } else { if ($format === 'yyyy/mm/dd;@') { return date('Y/m/d', 1 * $value); } else { if ($format === self::FORMAT_CURRENCY_USD_SIMPLE) { return '$' . number_format($value, 2); } else { if ($format === self::FORMAT_CURRENCY_USD) { return '$' . number_format($value); } else { if ($format === self::FORMAT_CURRENCY_EUR_SIMPLE) { return 'EUR ' . sprintf('%1.2f', $value); } } } } } } } } } } } } return $value; } } }