Вход Регистрация
* MrBorn

Работа со временем

  1. <?php
  2.  
  3. class Times
  4. {
  5. /**
  6.   * Преобразует количество секунд в строку формата ЧЧ:ММ:СС.
  7.   *
  8.   * @param int $time Количество секунд
  9.   * @return string Время в формате ЧЧ:ММ:СС
  10.   */
  11. public static function timeHours(int $time = 0): string
  12. {
  13. $hours = floor($time / 3600);
  14. $minutes = floor(($time % 3600) / 60);
  15. $seconds = $time % 60;
  16.  
  17. $formattedTime = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
  18.  
  19. return Filter::clearFullSpecialChars($formattedTime);
  20. }
  21.  
  22. /**
  23.   * Преобразует количество секунд в строку с указанием дней, часов, минут и секунд.
  24.   * Отображает только значимые части (например, скрывает нулевые дни или часы).
  25.   *
  26.   * @param int $seconds Количество секунд
  27.   * @return string Форматированная строка времени
  28.   */
  29. public static function timeInDate(int $seconds): string
  30. {
  31. $days = floor($seconds / 86400);
  32. $hours = floor(($seconds % 86400) / 3600);
  33. $minutes = floor(($seconds % 3600) / 60);
  34. $sec = $seconds % 60;
  35.  
  36. $parts = [];
  37.  
  38. if ($days > 0) {
  39. $parts[] = "{$days} д";
  40. }
  41.  
  42. if ($hours > 0 || !empty($parts)) {
  43. $parts[] = sprintf('%02d', $hours);
  44. }
  45.  
  46. if ($minutes > 0 || !empty($parts)) {
  47. $parts[] = sprintf('%02d', $minutes);
  48. }
  49.  
  50. if (empty($parts)) {
  51. return "{$sec} сек";
  52. }
  53.  
  54. $timePart = implode(':', array_slice($parts, -2));
  55. $result = $days > 0 ? "{$parts[0]} {$timePart}" : $timePart;
  56.  
  57. return Filter::clearFullSpecialChars($result);
  58. }
  59.  
  60. /**
  61.   * Возвращает текущую дату в формате ДД.ММ.ГГГГ.
  62.   *
  63.   * @return string
  64.   */
  65. public static function getCurrentDate(): string
  66. {
  67. return Filter::clearFullSpecialChars(date('d.m.Y'));
  68. }
  69.  
  70. /**
  71.   * Возвращает текущее время в формате ЧЧ:ММ:СС.
  72.   *
  73.   * @return string
  74.   */
  75. public static function getCurrentTime(): string
  76. {
  77. return Filter::clearFullSpecialChars(date('H:i:s'));
  78. }
  79.  
  80.  
  81. /**
  82.   * Возвращает текущую дату в формате "день месяц на русском языке" (например, "05 октября")
  83.   * Использует IntlDateFormatter при наличии, иначе — резервный вариант с ручной заменой месяцев.
  84.   *
  85.   * @return string
  86.   */
  87. public static function getDateRus(): string
  88. {
  89. // Попытка использовать Intl для корректного форматирования даты на русском
  90. if (class_exists(\IntlDateFormatter::class)) {
  91. $formatter = new \IntlDateFormatter(
  92. 'ru_RU',
  93. \IntlDateFormatter::NONE,
  94. \IntlDateFormatter::NONE,
  95. null,
  96. null,
  97. "d MMMM"
  98. );
  99. $formatter->setPattern('d MMMM');
  100. return Filter::clearString($formatter->format(new \DateTime()));
  101. }
  102.  
  103. // Резервный вариант: ручное сопоставление месяцев
  104. $months = [
  105. 'January' => 'января',
  106. 'February' => 'февраля',
  107. 'March' => 'марта',
  108. 'April' => 'апреля',
  109. 'May' => 'мая',
  110. 'June' => 'июня',
  111. 'July' => 'июля',
  112. 'August' => 'августа',
  113. 'September' => 'сентября',
  114. 'October' => 'октября',
  115. 'November' => 'ноября',
  116. 'December' => 'декабря',
  117. ];
  118.  
  119. $date = date('d F');
  120. foreach ($months as $en => $ru) {
  121. if (stripos($date, $en) !== false) {
  122. $date = str_ireplace($en, $ru, $date);
  123. break;
  124. }
  125. }
  126.  
  127. return Filter::clearString($date);
  128. }
  129. }
» Описание: Писал для вап l2. Пыха 8.0, комментарии есть
» Время добавления: Вчера в 17:54
» Посмотров: 10
» textarea
» Рейтинг: [+0 | -0]
Комментарии [0]
Онлайн: 4
Реклама