You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
6.7 KiB

  1. <?php
  2. /**
  3. * Format
  4. *
  5. * @copyright NetMonsters <team@netmonsters.ru>
  6. * @link
  7. * @package Majestic
  8. * @subpackage Core
  9. * @since 24.12.2008
  10. * @version SVN: $Id$
  11. * @filesource $URL$
  12. */
  13. /**
  14. * Отвечает за конвертацию данных между читаемым
  15. * человеком и машиной форматами.
  16. *
  17. */
  18. class Format
  19. {
  20. /* Date & time */
  21. static protected $time_format = 'H:i:s';
  22. static protected $date_format = 'd.m.Y';
  23. static protected $today_format = 'd.m.Y'; //disabled by default
  24. static protected $date_time_format = 'H:i d.m.Y';
  25. static protected $today_time_format = 'H:i d.m.Y'; //disabled by default
  26. static protected $timezone_offset = 0;
  27. /* money */
  28. static protected $decimal_point = ',';
  29. static protected $currency_symbol = 'руб.';
  30. static protected $frac_digits = 2;
  31. static public function getCurrency()
  32. {
  33. return self::$currency_symbol;
  34. }
  35. public static function setCurrencySymbol($symbol)
  36. {
  37. self::$currency_symbol = $symbol;
  38. }
  39. /**
  40. * Форматируем int в денежный формат
  41. *
  42. * @param mixed $int
  43. * @param bool $currency - показывать валюту
  44. * @param bool $show_decimals - показывать или нет дробную часть
  45. */
  46. static public function int2money($int = 0, $currency = false, $show_decimals = true)
  47. {
  48. $money = number_format($int/100, ($show_decimals) ? self::$frac_digits : 0, self::$decimal_point, ' ');
  49. return $money . (($currency) ? '&nbsp;' . self::$currency_symbol : '');
  50. }
  51. static public function money2int($money)
  52. {
  53. $money = str_replace(' ', '', $money);
  54. if(!strstr($money, self::$decimal_point) && !strstr($money, '.')){
  55. $int = (int)$money * 100;
  56. }else{
  57. $int = (int)str_replace(array('.', self::$decimal_point), '', $money);
  58. }
  59. return $int;
  60. }
  61. /**
  62. * Возвращает время в часах из секунд.
  63. *
  64. * @param int $timestamp
  65. * @return string
  66. */
  67. static public function int2time($timestamp = 0)
  68. {
  69. $hours = floor($timestamp / 3600);
  70. $minutes = floor(($timestamp / 60) - ($hours * 60));
  71. $seconds = $timestamp - ($hours * 3600) - ($minutes * 60);
  72. return ($hours < 10 ? ('0' . $hours) : $hours)
  73. . ':' . ($minutes < 10 ? ('0' . $minutes) : $minutes)
  74. . ':' . ($seconds < 10 ? ('0' . $seconds) : $seconds);
  75. }
  76. /**
  77. * Возвращает дату и время из таймстампа.
  78. *
  79. * @param int $timestamp
  80. * @param bool $hours
  81. * @return string
  82. */
  83. static public function int2date($timestamp = 0, $hours = true)
  84. {
  85. if (date('Ymd') == date('Ymd', $timestamp)) {
  86. return date(($hours) ? self::$today_time_format : self::$today_format , $timestamp);
  87. }
  88. return date(($hours) ? self::$date_time_format : self::$date_format , $timestamp);
  89. }
  90. static public function int2rusDate($timestamp = 0, $hours = false)
  91. {
  92. $month = array('января', 'февраля', 'марта',
  93. 'апреля', 'мая', 'июня',
  94. 'июля', 'августа', 'сентября',
  95. 'октября', 'ноября', 'декабря');
  96. $date = ($hours) ? date('H:i d', $timestamp) . ' ' . $month[date('m', $timestamp) - 1] . ' ' .date('Y', $timestamp) : date('d', $timestamp) . ' ' . $month[date('m', $timestamp) - 1] . ' ' .date('Y', $timestamp);
  97. return $date;
  98. }
  99. /**
  100. * Установка смещения для getTime
  101. *
  102. * @param int $offset
  103. */
  104. static public function setTimezoneOffset($offset)
  105. {
  106. self::$timezone_offset = $offset;
  107. }
  108. /**
  109. * Установка форматов даты
  110. *
  111. */
  112. static public function setDateFormat($date_time_format, $date_format = false)
  113. {
  114. self::$date_time_format = $date_time_format;
  115. if ($date_format) {
  116. self::$date_format = $date_format;
  117. }
  118. }
  119. /**
  120. * Установка форматов даты для текущего дня
  121. *
  122. */
  123. static public function setTodayFormat($today_time_format, $today_format = false)
  124. {
  125. self::$today_time_format = $today_time_format;
  126. if ($today_format) {
  127. self::$today_format = $today_format;
  128. }
  129. }
  130. /**
  131. * Преобразует время в секунды.
  132. *
  133. * @param string $time
  134. * @return int
  135. */
  136. static public function time2int($time)
  137. {
  138. $elements = explode(':', $time);
  139. if(count($elements) == 3){
  140. list($h, $m, $s) = $elements;
  141. $int = ($h * 60 * 60) + ($m * 60) + $s;
  142. } else {
  143. $int = (int)$time;
  144. }
  145. return $int;
  146. }
  147. /**
  148. * Преобразует дату в таймстамп.
  149. *
  150. * @param mixed $time
  151. * @return TimeFormat
  152. */
  153. static public function date2int($time)
  154. {
  155. return strtotime($time);
  156. }
  157. static public function int2phone($intphone)
  158. {
  159. $intphone = (string) $intphone;
  160. if (strlen($intphone) == 10) {
  161. return '(' . substr($intphone, 0, 3) . ') ' . substr($intphone, 3, 3) . '-' . substr($intphone, 6, 2) . '-' . substr($intphone, 8, 2);
  162. } elseif (strlen($intphone) == 7) {
  163. return substr($intphone, 0, 3) . '-' . substr($intphone, 3, 2) . '-' . substr($intphone, 5, 2);
  164. }
  165. return '';
  166. }
  167. static public function phone2int($phone)
  168. {
  169. $phone = str_replace(array(' ', '-', '(', ')'), '', $phone);
  170. $phone_length = strlen($phone);
  171. if (is_numeric($phone) && ($phone_length == 7 || $phone_length == 10)) { //бывают семизначные прямые номера
  172. if ($phone_length == 7) {
  173. $phone = '495' . $phone;
  174. }
  175. return $phone;
  176. }
  177. return '';
  178. }
  179. /**
  180. * Байты в мегабайты
  181. * @param int $bytes
  182. * @return string
  183. */
  184. public static function bytes2MB($bytes)
  185. {
  186. $mb = number_format((int) $bytes / 1024 / 1024, 2, '.', '');
  187. return preg_replace("/(\.?)0+$/", "", $mb) . 'МБ';
  188. }
  189. /**
  190. * Байты в килобайты
  191. * @param int $bytes
  192. * @return string
  193. */
  194. public static function bytes2KB($bytes)
  195. {
  196. $kb = number_format((int) $bytes / 1024, 2, '.', '');
  197. return preg_replace("/(\.?)0+$/", "", $kb) . 'КБ';
  198. }
  199. }
  200. /**
  201. * Оффсет с учетом летнего/зимнего времени
  202. */
  203. Format::setTimezoneOffset(date('Z') - ((date('I') ? 60*60 : 0 )));
  204. ?>