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.

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