1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
DurationFormatter.php
См. документацию.
1<?php
2
4
6
8{
9 public const SECONDS = 60;
10 public const HALF_SECONDS = self::SECONDS / 2;
11 public const MINUTES = 60;
12 public const HALF_MINUTES = self::MINUTES / 2;
13 public const HOURS = 24;
14 public const HALF_HOURS = self::HOURS / 2;
15 public const DAYS = 31;
16 public const HALF_DAYS = 15;
17 public const MONTHS = 12;
18 public const HALF_MONTHS = self::MONTHS / 2;
19 public const DAYS_YEAR = 365;
20
21 public static function roundTimeInSeconds(int $timeInSeconds, int $meaningUnit = 1): int
22 {
23 $checkUnits = static function (array $units) use ($meaningUnit) {
24 return count(array_filter($units)) <= $meaningUnit;
25 };
26
27 $roundUnitFunction = [
28 'self::removeOrRoundSeconds',
29 'self::removeOrRoundMinutes',
30 'self::removeOrRoundHours',
31 'self::removeOrRoundDays',
32 'self::removeOrRoundMonths',
33 ];
34
35 $unitMod = self::getUnitMod($timeInSeconds);
36 for ($i = -1; $i <= 4; $i++)
37 {
38 if (isset($roundUnitFunction[$i]))
39 {
40 $unitMod = call_user_func($roundUnitFunction[$i], $unitMod);;
41 }
42
43 if ($checkUnits($unitMod))
44 {
45 break;
46 }
47 }
48
49 return self::getFromUnitMod($unitMod);
50 }
51
52 private static function removeOrRoundSeconds(array $unitMod): array
53 {
54 $seconds = $unitMod['s'];
55 $minutes = $unitMod['i'];
56
57 if (($minutes !== 0 && $seconds >= self::HALF_SECONDS) || ($minutes === 0 && $seconds === self::SECONDS))
58 {
59 ++$minutes;
60 }
61
62 $unitMod['s'] = 0;
63 $unitMod['i'] = $minutes;
64
65 return $unitMod;
66 }
67
68 private static function removeOrRoundMinutes(array $unitMod): array
69 {
70 $minutes = $unitMod['i'];
71 $hours = $unitMod['H'];
72
73 if (($hours !== 0 && $minutes >= self::HALF_MINUTES) || ($hours === 0 && $minutes === self::MINUTES))
74 {
75 ++$hours;
76 }
77
78 $unitMod['i'] = 0;
79 $unitMod['H'] = $hours;
80
81 return $unitMod;
82 }
83
84 private static function removeOrRoundHours(array $unitMod): array
85 {
86 $hours = $unitMod['H'];
87 $days = $unitMod['d'];
88
89 if (($days !== 0 && $hours >= self::HALF_HOURS) || ($days === 0 && $hours === self::HOURS))
90 {
91 ++$days;
92 }
93
94 $unitMod['H'] = 0;
95 $unitMod['d'] = $days;
96
97 return $unitMod;
98 }
99
100 private static function removeOrRoundDays(array $unitMod): array
101 {
102 $days = $unitMod['d'];
103 $months = $unitMod['m'];
104
105 if (($months !== 0 && $days >= self::HALF_DAYS) || ($months === 0 && $days === self::DAYS))
106 {
107 ++$months;
108 }
109
110 $unitMod['d'] = 0;
111 $unitMod['m'] = $months;
112
113 return $unitMod;
114 }
115
116 private static function removeOrRoundMonths(array $unitMod): array
117 {
118 $months = $unitMod['m'];
119 $years = $unitMod['Y'];
120
121 if (($years !== 0 && $months >= self::HALF_MONTHS) || ($years === 0 && $months === self::MONTHS))
122 {
123 ++$years;
124 }
125
126 $unitMod['m'] = 0;
127 $unitMod['Y'] = $years;
128
129 return $unitMod;
130 }
131
132 public static function getFromUnitMod(array $unitMod): int
133 {
134 return (
135 ($unitMod['s'] ?? 0)
136 + self::getSecondsFromMinutes($unitMod['i'] ?? 0)
137 + self::getSecondsFromHours($unitMod['H'] ?? 0)
138 + self::getSecondsFromDays($unitMod['d'] ?? 0)
139 + self::getSecondsFromMonths($unitMod['m'] ?? 0)
140 + self::getSecondsFromYears($unitMod['Y'] ?? 0)
141 );
142 }
143
144 public static function roundUpTimeInSeconds(int $timeInSeconds): int
145 {
146 if ($timeInSeconds <= self::SECONDS)
147 {
148 return $timeInSeconds;
149 }
150
151 $unitMod = self::getUnitMod($timeInSeconds);
152
153 $years = $unitMod['Y'];
154 $months = $unitMod['m'];
155 $days = $unitMod['d'];
156 $hours = $unitMod['H'];
157 $minutes = $unitMod['i'];
158 $seconds = $unitMod['s'];
159
160 if ($years !== 0)
161 {
162 if ($seconds || $minutes || $hours || $days || $months)
163 {
164 ++$years;
165 }
166
167 return self::getSecondsFromYears($years);
168 }
169
170 if ($months !== 0)
171 {
172 if ($seconds || $minutes || $hours || $days)
173 {
174 ++$months;
175 }
176
177 return $months === self::MONTHS ? self::getSecondsFromYears(1) : self::getSecondsFromMonths($months);
178 }
179
180 if ($days !== 0)
181 {
182 if ($seconds || $minutes || $hours)
183 {
184 ++$days;
185 }
186
187 return $days === self::DAYS ? self::getSecondsFromMonths(1) : self::getSecondsFromDays($days);
188 }
189
190 if ($hours !== 0)
191 {
192 if ($seconds || $minutes)
193 {
194 ++$hours;
195 }
196
198 }
199
200 if ($minutes !== 0)
201 {
202 if ($seconds)
203 {
204 ++$minutes;
205 }
206
207 return $minutes === self::MINUTES ? self::getSecondsFromHours(1) : self::getSecondsFromMinutes($minutes);
208 }
209
210 return $seconds;
211 }
212
213 public static function getUnitMod(int $seconds): array
214 {
215 $minutes = $seconds >= self::SECONDS ? (int)($seconds / self::SECONDS) : 0;
216 $hours = $minutes >= self::MINUTES ? (int)($minutes / self::MINUTES) : 0;
217 $days = $hours >= self::HOURS ? (int)($hours / self::HOURS) : 0;
218 $months = $days >= self::DAYS ? (int)($days / self::DAYS) : 0;
219 $years = $months >= self::MONTHS ? (int)($months / self::MONTHS) : 0;
220
221 return [
222 's' => $seconds % self::SECONDS,
223 'i' => $minutes % self::MINUTES,
224 'H' => $hours % self::HOURS,
225 'd' => $days % self::DAYS,
226 'm' => $months % self::MONTHS,
227 'Y' => $years,
228 ];
229 }
230
231 public static function getSecondsFromMinutes(int $minutes): int
232 {
233 return $minutes * self::SECONDS;
234 }
235
236 public static function getSecondsFromHours(int $hours): int
237 {
238 return $hours * self::MINUTES * self::SECONDS;
239 }
240
241 public static function getSecondsFromDays(int $days): int
242 {
243 return $days * self::HOURS * self::MINUTES * self::SECONDS;
244 }
245
246 public static function getSecondsFromMonths(int $months): int
247 {
248 return $months * self::DAYS * self::HOURS * self::MINUTES * self::SECONDS;
249 }
250
251 public static function getSecondsFromYears(int $years): int
252 {
253 return $years * self::MONTHS * self::DAYS * self::HOURS * self::MINUTES * self::SECONDS;
254 }
255
256 public static function format(int $duration): ?string
257 {
258 if ($duration === 0)
259 {
260 return Loc::getMessage('BIZPROC_UI_DURATION_FORMATTER_DURATION_ZERO');
261 }
262
263 $valuedMods = array_filter(self::getUnitMod($duration));
264 $targetFormat = array_key_last($valuedMods);
265 if ($targetFormat)
266 {
267 $formats = [
268 'Y' => 'Ydiff',
269 'm' => 'mdiff',
270 'd' => 'ddiff',
271 'H' => 'Hdiff',
272 'i' => 'idiff',
273 's' => 'sdiff',
274 ];
275
276 return \FormatDate($formats[$targetFormat], time() - $duration);
277 }
278
279 return null;
280 }
281}
static getSecondsFromMinutes(int $minutes)
Определения DurationFormatter.php:231
static getSecondsFromHours(int $hours)
Определения DurationFormatter.php:236
static getFromUnitMod(array $unitMod)
Определения DurationFormatter.php:132
static getUnitMod(int $seconds)
Определения DurationFormatter.php:213
static roundUpTimeInSeconds(int $timeInSeconds)
Определения DurationFormatter.php:144
static format(int $duration)
Определения DurationFormatter.php:256
static roundTimeInSeconds(int $timeInSeconds, int $meaningUnit=1)
Определения DurationFormatter.php:21
static getSecondsFromDays(int $days)
Определения DurationFormatter.php:241
static getSecondsFromMonths(int $months)
Определения DurationFormatter.php:246
static getSecondsFromYears(int $years)
Определения DurationFormatter.php:251
$hours
Определения cron_html_pages.php:15
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936