Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
1009 / 1009 |
|
100.00% |
22 / 22 |
CRAP | |
100.00% |
1 / 1 |
Measurement | |
100.00% |
1009 / 1009 |
|
100.00% |
22 / 22 |
405 | |
100.00% |
1 / 1 |
__construct | n/a |
0 / 0 |
n/a |
0 / 0 |
1 | |||||
convertTemperature | |
100.00% |
18 / 18 |
|
100.00% |
1 / 1 |
10 | |||
normalizeTemperature | |
100.00% |
17 / 17 |
|
100.00% |
1 / 1 |
10 | |||
convertWeight | |
100.00% |
44 / 44 |
|
100.00% |
1 / 1 |
16 | |||
normalizeWeight | |
100.00% |
43 / 43 |
|
100.00% |
1 / 1 |
16 | |||
convertLength | |
100.00% |
68 / 68 |
|
100.00% |
1 / 1 |
24 | |||
normalizeLength | |
100.00% |
67 / 67 |
|
100.00% |
1 / 1 |
24 | |||
convertArea | |
100.00% |
28 / 28 |
|
100.00% |
1 / 1 |
15 | |||
normalizeArea | |
100.00% |
27 / 27 |
|
100.00% |
1 / 1 |
15 | |||
convertVolume | |
100.00% |
116 / 116 |
|
100.00% |
1 / 1 |
40 | |||
normalizeVolume | |
100.00% |
115 / 115 |
|
100.00% |
1 / 1 |
40 | |||
convertSpeed | |
100.00% |
104 / 104 |
|
100.00% |
1 / 1 |
36 | |||
normalizeSpeed | |
100.00% |
103 / 103 |
|
100.00% |
1 / 1 |
36 | |||
convertTime | |
100.00% |
29 / 29 |
|
100.00% |
1 / 1 |
11 | |||
normalizeTime | |
100.00% |
28 / 28 |
|
100.00% |
1 / 1 |
11 | |||
convertAngle | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
12 | |||
normalizeAngle | |
100.00% |
21 / 21 |
|
100.00% |
1 / 1 |
12 | |||
convertPressure | |
100.00% |
40 / 40 |
|
100.00% |
1 / 1 |
15 | |||
normalizePressure | |
100.00% |
39 / 39 |
|
100.00% |
1 / 1 |
15 | |||
convertEnergy | |
100.00% |
19 / 19 |
|
100.00% |
1 / 1 |
11 | |||
normalizeEnergy | |
100.00% |
18 / 18 |
|
100.00% |
1 / 1 |
11 | |||
convertFileSize | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
12 | |||
normalizeFileSize | |
100.00% |
21 / 21 |
|
100.00% |
1 / 1 |
12 |
1 | <?php |
2 | /** |
3 | * Jingga |
4 | * |
5 | * PHP Version 8.1 |
6 | * |
7 | * @package phpOMS\Utils\Converter |
8 | * @copyright Dennis Eichhorn |
9 | * @license OMS License 2.0 |
10 | * @version 1.0.0 |
11 | * @link https://jingga.app |
12 | */ |
13 | declare(strict_types=1); |
14 | |
15 | namespace phpOMS\Utils\Converter; |
16 | |
17 | /** |
18 | * Measurement converter. |
19 | * |
20 | * @package phpOMS\Utils\Converter |
21 | * @license OMS License 2.0 |
22 | * @link https://jingga.app |
23 | * @since 1.0.0 |
24 | */ |
25 | final class Measurement |
26 | { |
27 | /** |
28 | * Constructor. |
29 | * |
30 | * @since 1.0.0 |
31 | * @codeCoverageIgnore |
32 | */ |
33 | private function __construct() |
34 | { |
35 | } |
36 | |
37 | /** |
38 | * Convert temperature. |
39 | * |
40 | * @param float $value Value to convert |
41 | * @param string $from Input temperature |
42 | * @param string $to Output temperature |
43 | * |
44 | * @return float |
45 | * |
46 | * @throws \InvalidArgumentException |
47 | * |
48 | * @since 1.0.0 |
49 | */ |
50 | public static function convertTemperature(float $value, string $from = TemperatureType::FAHRENHEIT, string $to = TemperatureType::CELSIUS) : float |
51 | { |
52 | // to kelving |
53 | $value = self::normalizeTemperature($value, $from); |
54 | |
55 | switch ($to) { |
56 | case TemperatureType::KELVIN: |
57 | break; |
58 | case TemperatureType::CELSIUS: |
59 | $value -= 273.15; |
60 | break; |
61 | case TemperatureType::FAHRENHEIT: |
62 | $value = (($value - 273.15) * 1.8) + 32; |
63 | break; |
64 | case TemperatureType::REAUMUR: |
65 | $value = ($value - 273.15) * 0.8; |
66 | break; |
67 | case TemperatureType::RANKINE: |
68 | $value = ($value - 273.15) * 1.8 + 491.67; |
69 | break; |
70 | case TemperatureType::DELISLE: |
71 | $value = ($value - 273.15) * 1.5 - 100; |
72 | break; |
73 | case TemperatureType::NEWTON: |
74 | $value = ($value - 273.15) * 0.33; |
75 | break; |
76 | case TemperatureType::ROMER: |
77 | $value = ($value - 273.15) * 0.525 + 7.5; |
78 | break; |
79 | default: |
80 | throw new \InvalidArgumentException('Temperature not supported'); |
81 | } |
82 | |
83 | return $value; |
84 | } |
85 | |
86 | /** |
87 | * Convert temperature. |
88 | * |
89 | * @param float $value Value to convert |
90 | * @param string $from Input temperature |
91 | * |
92 | * @return float |
93 | * |
94 | * @throws \InvalidArgumentException |
95 | * |
96 | * @since 1.0.0 |
97 | */ |
98 | private static function normalizeTemperature(float $value, string $from) : float |
99 | { |
100 | switch ($from) { |
101 | case TemperatureType::KELVIN: |
102 | break; |
103 | case TemperatureType::CELSIUS: |
104 | $value += 273.15; |
105 | break; |
106 | case TemperatureType::FAHRENHEIT: |
107 | $value = ($value - 32) / 1.8 + 273.5; |
108 | break; |
109 | case TemperatureType::REAUMUR: |
110 | $value = $value / 0.8 + 273.15; |
111 | break; |
112 | case TemperatureType::RANKINE: |
113 | $value = ($value - 491.67) / 1.8 + 273.15; |
114 | break; |
115 | case TemperatureType::DELISLE: |
116 | $value = ($value + 100) / 1.5 + 273.15; |
117 | break; |
118 | case TemperatureType::NEWTON: |
119 | $value = $value / 0.33 + 273.15; |
120 | break; |
121 | case TemperatureType::ROMER: |
122 | $value = ($value - 7.5) / 0.525 + 273.15; |
123 | break; |
124 | default: |
125 | throw new \InvalidArgumentException('Temperature not supported'); |
126 | } |
127 | |
128 | return $value; |
129 | } |
130 | |
131 | /** |
132 | * Convert weight. |
133 | * |
134 | * @param float $value Value to convert |
135 | * @param string $from Input weight |
136 | * @param string $to Output weight |
137 | * |
138 | * @return float |
139 | * |
140 | * @throws \InvalidArgumentException |
141 | * |
142 | * @since 1.0.0 |
143 | */ |
144 | public static function convertWeight(float $value, string $from = WeightType::GRAM, string $to = WeightType::KILOGRAM) : float |
145 | { |
146 | // to gram |
147 | $value = self::normalizeWeight($value, $from); |
148 | |
149 | switch ($to) { |
150 | case WeightType::GRAM: |
151 | break; |
152 | case WeightType::MICROGRAM: |
153 | $value *= 1000000; |
154 | break; |
155 | case WeightType::MILLIGRAM: |
156 | $value *= 1000; |
157 | break; |
158 | case WeightType::KILOGRAM: |
159 | $value /= 1000; |
160 | break; |
161 | case WeightType::METRIC_TONS: |
162 | $value /= 1000000; |
163 | break; |
164 | case WeightType::STONES: |
165 | $value *= 0.15747 * 1000; |
166 | break; |
167 | case WeightType::OUNCES: |
168 | $value *= 0.035274; |
169 | break; |
170 | case WeightType::POUNDS: |
171 | $value *= 0.0022046; |
172 | break; |
173 | case WeightType::GRAIN: |
174 | $value *= 15.432; |
175 | break; |
176 | case WeightType::CARAT: |
177 | $value *= 5.0; |
178 | break; |
179 | case WeightType::LONG_TONS: |
180 | $value *= 9.8420653e-07; |
181 | break; |
182 | case WeightType::SHORT_TONS: |
183 | $value *= 1.1023113e-06; |
184 | break; |
185 | case WeightType::TROY_POUNDS: |
186 | $value *= 0.0026792; |
187 | break; |
188 | case WeightType::TROY_OUNCES: |
189 | $value *= 0.032151; |
190 | break; |
191 | default: |
192 | throw new \InvalidArgumentException('Weight not supported'); |
193 | } |
194 | |
195 | return $value; |
196 | } |
197 | |
198 | /** |
199 | * Convert weight. |
200 | * |
201 | * @param float $value Value to convert |
202 | * @param string $from Input weight |
203 | * |
204 | * @return float |
205 | * |
206 | * @throws \InvalidArgumentException |
207 | * |
208 | * @since 1.0.0 |
209 | */ |
210 | private static function normalizeWeight(float $value, string $from) : float |
211 | { |
212 | switch ($from) { |
213 | case WeightType::GRAM: |
214 | break; |
215 | case WeightType::MICROGRAM: |
216 | $value /= 1000000; |
217 | break; |
218 | case WeightType::MILLIGRAM: |
219 | $value /= 1000; |
220 | break; |
221 | case WeightType::KILOGRAM: |
222 | $value *= 1000; |
223 | break; |
224 | case WeightType::METRIC_TONS: |
225 | $value *= 1000000; |
226 | break; |
227 | case WeightType::STONES: |
228 | $value /= 0.15747 * 1000; |
229 | break; |
230 | case WeightType::OUNCES: |
231 | $value /= 0.035274; |
232 | break; |
233 | case WeightType::POUNDS: |
234 | $value /= 0.0022046; |
235 | break; |
236 | case WeightType::GRAIN: |
237 | $value /= 15.432; |
238 | break; |
239 | case WeightType::CARAT: |
240 | $value /= 5.0; |
241 | break; |
242 | case WeightType::LONG_TONS: |
243 | $value /= 9.8420653e-07; |
244 | break; |
245 | case WeightType::SHORT_TONS: |
246 | $value /= 1.1023113e-06; |
247 | break; |
248 | case WeightType::TROY_POUNDS: |
249 | $value /= 0.0026792; |
250 | break; |
251 | case WeightType::TROY_OUNCES: |
252 | $value /= 0.032151; |
253 | break; |
254 | default: |
255 | throw new \InvalidArgumentException('Weight not supported'); |
256 | } |
257 | |
258 | return $value; |
259 | } |
260 | |
261 | /** |
262 | * Convert length. |
263 | * |
264 | * @param float $value Value to convert |
265 | * @param string $from Input length |
266 | * @param string $to Output length |
267 | * |
268 | * @return float |
269 | * |
270 | * @throws \InvalidArgumentException |
271 | * |
272 | * @since 1.0.0 |
273 | */ |
274 | public static function convertLength(float $value, string $from = LengthType::METERS, string $to = LengthType::KILOMETERS) : float |
275 | { |
276 | // to meter |
277 | $value = self::normalizeLength($value, $from); |
278 | |
279 | switch ($to) { |
280 | case LengthType::METERS: |
281 | break; |
282 | case LengthType::MILES: |
283 | $value *= 0.00062137; |
284 | break; |
285 | case LengthType::MICROMETER: |
286 | $value *= 1000000; |
287 | break; |
288 | case LengthType::CENTIMETERS: |
289 | $value *= 100; |
290 | break; |
291 | case LengthType::MILLIMETERS: |
292 | $value *= 1000; |
293 | break; |
294 | case LengthType::KILOMETERS: |
295 | $value /= 1000; |
296 | break; |
297 | case LengthType::CHAINS: |
298 | $value *= 0.049710; |
299 | break; |
300 | case LengthType::FEET: |
301 | $value *= 3.2808; |
302 | break; |
303 | case LengthType::FURLONGS: |
304 | $value *= 0.0049710; |
305 | break; |
306 | case LengthType::MICROINCH: |
307 | $value *= 39370000; |
308 | break; |
309 | case LengthType::NANOMETER: |
310 | $value *= 1000000000; |
311 | break; |
312 | case LengthType::INCHES: |
313 | $value *= 39.370; |
314 | break; |
315 | case LengthType::YARDS: |
316 | $value *= 1.0936; |
317 | break; |
318 | case LengthType::PARSECS: |
319 | $value *= 3.2407793e-17; |
320 | break; |
321 | case LengthType::UK_NAUTICAL_MILES: |
322 | $value *= 0.00053961; |
323 | break; |
324 | case LengthType::US_NAUTICAL_MILES: |
325 | $value *= 0.00053996; |
326 | break; |
327 | case LengthType::UK_NAUTICAL_LEAGUES: |
328 | $value *= 0.00017987; |
329 | break; |
330 | case LengthType::UK_LEAGUES: |
331 | $value *= 0.00020700; |
332 | break; |
333 | case LengthType::US_LEAGUES: |
334 | $value *= 0.00020712; |
335 | break; |
336 | case LengthType::NAUTICAL_LEAGUES: |
337 | $value *= 0.00017999; |
338 | break; |
339 | case LengthType::LIGHTYEARS: |
340 | $value *= 1.0570008e-16; |
341 | break; |
342 | case LengthType::DECIMETERS: |
343 | $value *= 10; |
344 | break; |
345 | default: |
346 | throw new \InvalidArgumentException('Length not supported'); |
347 | } |
348 | |
349 | return $value; |
350 | } |
351 | |
352 | /** |
353 | * Convert length. |
354 | * |
355 | * @param float $value Value to convert |
356 | * @param string $from Input length |
357 | * |
358 | * @return float |
359 | * |
360 | * @throws \InvalidArgumentException |
361 | * |
362 | * @since 1.0.0 |
363 | */ |
364 | private static function normalizeLength(float $value, string $from) : float |
365 | { |
366 | switch ($from) { |
367 | case LengthType::METERS: |
368 | break; |
369 | case LengthType::MILES: |
370 | $value /= 0.00062137; |
371 | break; |
372 | case LengthType::MICROMETER: |
373 | $value /= 1000000; |
374 | break; |
375 | case LengthType::NANOMETER: |
376 | $value /= 1000000000; |
377 | break; |
378 | case LengthType::CENTIMETERS: |
379 | $value /= 100; |
380 | break; |
381 | case LengthType::MILLIMETERS: |
382 | $value /= 1000; |
383 | break; |
384 | case LengthType::KILOMETERS: |
385 | $value *= 1000; |
386 | break; |
387 | case LengthType::CHAINS: |
388 | $value /= 0.049710; |
389 | break; |
390 | case LengthType::FEET: |
391 | $value /= 3.2808; |
392 | break; |
393 | case LengthType::FURLONGS: |
394 | $value /= 0.0049710; |
395 | break; |
396 | case LengthType::MICROINCH: |
397 | $value /= 39370000; |
398 | break; |
399 | case LengthType::INCHES: |
400 | $value /= 39.370; |
401 | break; |
402 | case LengthType::YARDS: |
403 | $value /= 1.0936; |
404 | break; |
405 | case LengthType::PARSECS: |
406 | $value /= 3.2407793e-17; |
407 | break; |
408 | case LengthType::UK_NAUTICAL_MILES: |
409 | $value /= 0.00053961; |
410 | break; |
411 | case LengthType::US_NAUTICAL_MILES: |
412 | $value /= 0.00053996; |
413 | break; |
414 | case LengthType::UK_NAUTICAL_LEAGUES: |
415 | $value /= 0.00017987; |
416 | break; |
417 | case LengthType::UK_LEAGUES: |
418 | $value /= 0.00020700; |
419 | break; |
420 | case LengthType::US_LEAGUES: |
421 | $value /= 0.00020712; |
422 | break; |
423 | case LengthType::NAUTICAL_LEAGUES: |
424 | $value /= 0.00017999; |
425 | break; |
426 | case LengthType::LIGHTYEARS: |
427 | $value /= 1.0570008e-16; |
428 | break; |
429 | case LengthType::DECIMETERS: |
430 | $value /= 10; |
431 | break; |
432 | default: |
433 | throw new \InvalidArgumentException('Length not supported'); |
434 | } |
435 | |
436 | return $value; |
437 | } |
438 | |
439 | /** |
440 | * Convert area. |
441 | * |
442 | * @param float $value Value to convert |
443 | * @param string $from Input length |
444 | * @param string $to Output length |
445 | * |
446 | * @return float |
447 | * |
448 | * @throws \InvalidArgumentException |
449 | * |
450 | * @since 1.0.0 |
451 | */ |
452 | public static function convertArea(float $value, string $from = AreaType::SQUARE_METERS, string $to = AreaType::SQUARE_KILOMETERS) : float |
453 | { |
454 | // to square meter |
455 | $value = self::normalizeArea($value, $from); |
456 | |
457 | switch ($to) { |
458 | case AreaType::SQUARE_METERS: |
459 | break; |
460 | case AreaType::SQUARE_FEET: |
461 | $value *= 10.764; |
462 | break; |
463 | case AreaType::SQUARE_KILOMETERS: |
464 | $value /= 1000000; |
465 | break; |
466 | case AreaType::SQUARE_MILES: |
467 | $value *= 3.8610216e-07; |
468 | break; |
469 | case AreaType::SQUARE_YARDS: |
470 | $value *= 1.1960; |
471 | break; |
472 | case AreaType::SQUARE_INCHES: |
473 | $value *= 1550; |
474 | break; |
475 | case AreaType::SQUARE_MICROINCHES: |
476 | $value *= 1.550031e+15; |
477 | break; |
478 | case AreaType::SQUARE_CENTIMETERS: |
479 | $value *= 10000; |
480 | break; |
481 | case AreaType::SQUARE_MILIMETERS: |
482 | $value *= 1000000; |
483 | break; |
484 | case AreaType::SQUARE_MICROMETERS: |
485 | $value *= 1000000000000; |
486 | break; |
487 | case AreaType::SQUARE_DECIMETERS: |
488 | $value *= 100; |
489 | break; |
490 | case AreaType::HECTARES: |
491 | $value /= 10000; |
492 | break; |
493 | case AreaType::ACRES: |
494 | $value *= 0.00024711; |
495 | break; |
496 | default: |
497 | throw new \InvalidArgumentException('Area not supported'); |
498 | } |
499 | |
500 | return $value; |
501 | } |
502 | |
503 | /** |
504 | * Convert area. |
505 | * |
506 | * @param float $value Value to convert |
507 | * @param string $from Input length |
508 | * |
509 | * @return float |
510 | * |
511 | * @throws \InvalidArgumentException |
512 | * |
513 | * @since 1.0.0 |
514 | */ |
515 | private static function normalizeArea(float $value, string $from) : float |
516 | { |
517 | switch ($from) { |
518 | case AreaType::SQUARE_METERS: |
519 | break; |
520 | case AreaType::SQUARE_FEET: |
521 | $value /= 10.764; |
522 | break; |
523 | case AreaType::SQUARE_KILOMETERS: |
524 | $value *= 1000000; |
525 | break; |
526 | case AreaType::SQUARE_MILES: |
527 | $value /= 3.8610216e-07; |
528 | break; |
529 | case AreaType::SQUARE_YARDS: |
530 | $value /= 1.1960; |
531 | break; |
532 | case AreaType::SQUARE_INCHES: |
533 | $value /= 1550; |
534 | break; |
535 | case AreaType::SQUARE_MICROINCHES: |
536 | $value /= 1.550031e+15; |
537 | break; |
538 | case AreaType::SQUARE_CENTIMETERS: |
539 | $value /= 10000; |
540 | break; |
541 | case AreaType::SQUARE_MILIMETERS: |
542 | $value /= 1000000; |
543 | break; |
544 | case AreaType::SQUARE_MICROMETERS: |
545 | $value /= 1000000000000; |
546 | break; |
547 | case AreaType::SQUARE_DECIMETERS: |
548 | $value /= 100; |
549 | break; |
550 | case AreaType::HECTARES: |
551 | $value *= 10000; |
552 | break; |
553 | case AreaType::ACRES: |
554 | $value /= 0.00024711; |
555 | break; |
556 | default: |
557 | throw new \InvalidArgumentException('Area not supported'); |
558 | } |
559 | |
560 | return $value; |
561 | } |
562 | |
563 | /** |
564 | * Convert volume. |
565 | * |
566 | * @param float $value Value to convert |
567 | * @param string $from Input volume |
568 | * @param string $to Output volume |
569 | * |
570 | * @return float |
571 | * |
572 | * @throws \InvalidArgumentException |
573 | * |
574 | * @since 1.0.0 |
575 | */ |
576 | public static function convertVolume(float $value, string $from = VolumeType::LITER, string $to = VolumeType::LITER) : float |
577 | { |
578 | // to square meter |
579 | $value = self::normalizeVolume($value, $from); |
580 | |
581 | switch ($to) { |
582 | case VolumeType::LITER: |
583 | break; |
584 | case VolumeType::US_GALLON_LIQUID: |
585 | $value *= 0.26417; |
586 | break; |
587 | case VolumeType::UK_GALLON: |
588 | $value *= 0.21997; |
589 | break; |
590 | case VolumeType::US_PINT_LIQUID: |
591 | $value *= 2.1134; |
592 | break; |
593 | case VolumeType::UK_PINT: |
594 | $value *= 1.7598; |
595 | break; |
596 | case VolumeType::CENTILITER: |
597 | $value *= 100; |
598 | break; |
599 | case VolumeType::MILLILITER: |
600 | $value *= 1000; |
601 | break; |
602 | case VolumeType::CUBIC_METER: |
603 | $value /= 1000; |
604 | break; |
605 | case VolumeType::UK_BARREL: |
606 | $value *= 0.0061103; |
607 | break; |
608 | case VolumeType::US_GALLON_DRY: |
609 | $value *= 0.22702; |
610 | break; |
611 | case VolumeType::CUBIC_FEET: |
612 | $value *= 0.035315; |
613 | break; |
614 | case VolumeType::US_QUARTS_LIQUID: |
615 | $value *= 1.0567; |
616 | break; |
617 | case VolumeType::US_QUARTS_DRY: |
618 | $value *= 0.90808; |
619 | break; |
620 | case VolumeType::UK_QUARTS: |
621 | $value *= 0.87988; |
622 | break; |
623 | case VolumeType::US_PINT_DRY: |
624 | $value *= 1.8162; |
625 | break; |
626 | case VolumeType::US_CUP: |
627 | $value *= 4.2268; |
628 | break; |
629 | case VolumeType::CAN_CUP: |
630 | $value *= 4.3994; |
631 | break; |
632 | case VolumeType::METRIC_CUP: |
633 | $value *= 4; |
634 | break; |
635 | case VolumeType::US_GILL: |
636 | $value *= 8.4535; |
637 | break; |
638 | case VolumeType::US_TABLESPOON: |
639 | $value *= 67.628; |
640 | break; |
641 | case VolumeType::UK_TABLESPOON: |
642 | $value *= 70.390; |
643 | break; |
644 | case VolumeType::METRIC_TABLESPOON: |
645 | $value *= 66.667; |
646 | break; |
647 | case VolumeType::US_TEASPOON: |
648 | $value *= 202.88; |
649 | break; |
650 | case VolumeType::UK_TEASPOON: |
651 | $value *= 281.56; |
652 | break; |
653 | case VolumeType::METRIC_TEASPOON: |
654 | $value *= 200; |
655 | break; |
656 | case VolumeType::US_OUNCES: |
657 | $value *= 33.814; |
658 | break; |
659 | case VolumeType::UK_OUNCES: |
660 | $value *= 35.195; |
661 | break; |
662 | case VolumeType::CUBIC_INCH: |
663 | $value *= 61.024; |
664 | break; |
665 | case VolumeType::CUBIC_CENTIMETER: |
666 | $value *= 1000; |
667 | break; |
668 | case VolumeType::CUBIC_MILLIMETER: |
669 | $value *= 1000000; |
670 | break; |
671 | case VolumeType::MICROLITER: |
672 | $value *= 1000000; |
673 | break; |
674 | case VolumeType::KILOLITER: |
675 | $value *= 1000; |
676 | break; |
677 | case VolumeType::UK_GILL: |
678 | $value *= 7.0390; |
679 | break; |
680 | case VolumeType::CUBIC_YARD: |
681 | $value *= 0.0013080; |
682 | break; |
683 | case VolumeType::US_BARREL_DRY: |
684 | $value *= 0.0086485; |
685 | break; |
686 | case VolumeType::US_BARREL_LIQUID: |
687 | $value *= 0.0083864; |
688 | break; |
689 | case VolumeType::US_BARREL_OIL: |
690 | $value *= 0.0062898; |
691 | break; |
692 | case VolumeType::US_BARREL_FEDERAL: |
693 | $value *= 0.0085217; |
694 | break; |
695 | default: |
696 | throw new \InvalidArgumentException('Volume not supported'); |
697 | } |
698 | |
699 | return $value; |
700 | } |
701 | |
702 | /** |
703 | * Convert volume. |
704 | * |
705 | * @param float $value Value to convert |
706 | * @param string $from Input volume |
707 | * |
708 | * @return float |
709 | * |
710 | * @throws \InvalidArgumentException |
711 | * |
712 | * @since 1.0.0 |
713 | */ |
714 | private static function normalizeVolume(float $value, string $from) : float |
715 | { |
716 | switch ($from) { |
717 | case VolumeType::LITER: |
718 | break; |
719 | case VolumeType::US_GALLON_LIQUID: |
720 | $value /= 0.26417; |
721 | break; |
722 | case VolumeType::UK_GALLON: |
723 | $value /= 0.21997; |
724 | break; |
725 | case VolumeType::US_PINT_LIQUID: |
726 | $value /= 2.1134; |
727 | break; |
728 | case VolumeType::UK_PINT: |
729 | $value /= 1.7598; |
730 | break; |
731 | case VolumeType::CENTILITER: |
732 | $value /= 100; |
733 | break; |
734 | case VolumeType::MILLILITER: |
735 | $value /= 1000; |
736 | break; |
737 | case VolumeType::CUBIC_METER: |
738 | $value *= 1000; |
739 | break; |
740 | case VolumeType::UK_BARREL: |
741 | $value /= 0.0061103; |
742 | break; |
743 | case VolumeType::US_GALLON_DRY: |
744 | $value /= 0.22702; |
745 | break; |
746 | case VolumeType::CUBIC_FEET: |
747 | $value /= 0.035315; |
748 | break; |
749 | case VolumeType::US_QUARTS_LIQUID: |
750 | $value /= 1.0567; |
751 | break; |
752 | case VolumeType::US_QUARTS_DRY: |
753 | $value /= 0.90808; |
754 | break; |
755 | case VolumeType::UK_QUARTS: |
756 | $value /= 0.87988; |
757 | break; |
758 | case VolumeType::US_PINT_DRY: |
759 | $value /= 1.8162; |
760 | break; |
761 | case VolumeType::US_CUP: |
762 | $value /= 4.2268; |
763 | break; |
764 | case VolumeType::CAN_CUP: |
765 | $value /= 4.3994; |
766 | break; |
767 | case VolumeType::METRIC_CUP: |
768 | $value /= 4; |
769 | break; |
770 | case VolumeType::US_GILL: |
771 | $value /= 8.4535; |
772 | break; |
773 | case VolumeType::US_TABLESPOON: |
774 | $value /= 67.628; |
775 | break; |
776 | case VolumeType::UK_TABLESPOON: |
777 | $value /= 70.390; |
778 | break; |
779 | case VolumeType::METRIC_TABLESPOON: |
780 | $value /= 66.667; |
781 | break; |
782 | case VolumeType::US_TEASPOON: |
783 | $value /= 202.88; |
784 | break; |
785 | case VolumeType::UK_TEASPOON: |
786 | $value /= 281.56; |
787 | break; |
788 | case VolumeType::METRIC_TEASPOON: |
789 | $value /= 200; |
790 | break; |
791 | case VolumeType::US_OUNCES: |
792 | $value /= 33.814; |
793 | break; |
794 | case VolumeType::UK_OUNCES: |
795 | $value /= 35.195; |
796 | break; |
797 | case VolumeType::CUBIC_INCH: |
798 | $value /= 61.024; |
799 | break; |
800 | case VolumeType::CUBIC_CENTIMETER: |
801 | $value /= 1000; |
802 | break; |
803 | case VolumeType::CUBIC_MILLIMETER: |
804 | $value /= 1000000; |
805 | break; |
806 | case VolumeType::MICROLITER: |
807 | $value /= 1000000; |
808 | break; |
809 | case VolumeType::KILOLITER: |
810 | $value /= 1000; |
811 | break; |
812 | case VolumeType::UK_GILL: |
813 | $value /= 7.0390; |
814 | break; |
815 | case VolumeType::CUBIC_YARD: |
816 | $value /= 0.0013080; |
817 | break; |
818 | case VolumeType::US_BARREL_DRY: |
819 | $value /= 0.0086485; |
820 | break; |
821 | case VolumeType::US_BARREL_LIQUID: |
822 | $value /= 0.0083864; |
823 | break; |
824 | case VolumeType::US_BARREL_OIL: |
825 | $value /= 0.0062898; |
826 | break; |
827 | case VolumeType::US_BARREL_FEDERAL: |
828 | $value /= 0.0085217; |
829 | break; |
830 | default: |
831 | throw new \InvalidArgumentException('Volume not supported'); |
832 | } |
833 | |
834 | return $value; |
835 | } |
836 | |
837 | /** |
838 | * Convert speed. |
839 | * |
840 | * @param float $value Value to convert |
841 | * @param string $from Input weight |
842 | * @param string $to Output weight |
843 | * |
844 | * @return float |
845 | * |
846 | * @throws \InvalidArgumentException |
847 | * |
848 | * @since 1.0.0 |
849 | */ |
850 | public static function convertSpeed(float $value, string $from = SpeedType::KILOMETERS_PER_HOUR, string $to = SpeedType::KILOMETERS_PER_HOUR) : float |
851 | { |
852 | // to kph |
853 | $value = self::normalizeSpeed($value, $from); |
854 | |
855 | switch ($to) { |
856 | case SpeedType::KILOMETERS_PER_HOUR: |
857 | break; |
858 | case SpeedType::MILES_PER_DAY: |
859 | $value = $value * 24 / 1.60934; |
860 | break; |
861 | case SpeedType::MILES_PER_HOUR: |
862 | $value /= 1.60934; |
863 | break; |
864 | case SpeedType::MILES_PER_MINUTE: |
865 | $value = $value / 60 / 1.60934; |
866 | break; |
867 | case SpeedType::MILES_PER_SECOND: |
868 | $value = $value / 3600 / 1.60934; |
869 | break; |
870 | case SpeedType::KILOMETERS_PER_DAY: |
871 | $value *= 24; |
872 | break; |
873 | case SpeedType::KILOMETERS_PER_MINUTE: |
874 | $value /= 60; |
875 | break; |
876 | case SpeedType::KILOMETERS_PER_SECOND: |
877 | $value /= 3600; |
878 | break; |
879 | case SpeedType::METERS_PER_DAY: |
880 | $value = $value * 24 * 1000; |
881 | break; |
882 | case SpeedType::METERS_PER_HOUR: |
883 | $value *= 1000; |
884 | break; |
885 | case SpeedType::METERS_PER_MINUTE: |
886 | $value = $value / 60 * 1000; |
887 | break; |
888 | case SpeedType::METERS_PER_SECOND: |
889 | $value = $value / 3600 * 1000; |
890 | break; |
891 | case SpeedType::CENTIMETERS_PER_DAY: |
892 | $value = $value * 24 * 100000; |
893 | break; |
894 | case SpeedType::CENTIMETERS_PER_HOUR: |
895 | $value *= 100000; |
896 | break; |
897 | case SpeedType::CENTIMETERS_PER_MINUTES: |
898 | $value = $value / 60 * 100000; |
899 | break; |
900 | case SpeedType::CENTIMETERS_PER_SECOND: |
901 | $value = $value / 3600 * 100000; |
902 | break; |
903 | case SpeedType::MILLIMETERS_PER_DAY: |
904 | $value = $value * 24 * 1000000; |
905 | break; |
906 | case SpeedType::MILLIMETERS_PER_HOUR: |
907 | $value *= 1000000; |
908 | break; |
909 | case SpeedType::MILLIMETERS_PER_MINUTE: |
910 | $value = $value / 60 * 1000000; |
911 | break; |
912 | case SpeedType::MILLIMETERS_PER_SECOND: |
913 | $value = $value / 3600 * 1000000; |
914 | break; |
915 | case SpeedType::YARDS_PER_DAY: |
916 | $value = $value * 24 / 0.0009144; |
917 | break; |
918 | case SpeedType::YARDS_PER_HOUR: |
919 | $value /= 0.0009144; |
920 | break; |
921 | case SpeedType::YARDS_PER_MINUTE: |
922 | $value = $value / 60 / 0.0009144; |
923 | break; |
924 | case SpeedType::YARDS_PER_SECOND: |
925 | $value = $value / 3600 / 0.0009144; |
926 | break; |
927 | case SpeedType::INCHES_PER_DAY: |
928 | $value = $value * 24 / 0.0000254; |
929 | break; |
930 | case SpeedType::INCHES_PER_HOUR: |
931 | $value /= 0.0000254; |
932 | break; |
933 | case SpeedType::INCHES_PER_MINUTE: |
934 | $value = $value / 60 / 0.0000254; |
935 | break; |
936 | case SpeedType::INCHES_PER_SECOND: |
937 | $value = $value / 3600 / 0.0000254; |
938 | break; |
939 | case SpeedType::FEET_PER_DAY: |
940 | $value = $value * 24 / 0.0003048; |
941 | break; |
942 | case SpeedType::FEET_PER_HOUR: |
943 | $value /= 0.0003048; |
944 | break; |
945 | case SpeedType::FEET_PER_MINUTE: |
946 | $value = $value / 60 / 0.0003048; |
947 | break; |
948 | case SpeedType::FEET_PER_SECOND: |
949 | $value = $value / 3600 / 0.0003048; |
950 | break; |
951 | case SpeedType::MACH: |
952 | $value /= 1225.044; |
953 | break; |
954 | case SpeedType::KNOTS: |
955 | $value /= 1.852; |
956 | break; |
957 | default: |
958 | throw new \InvalidArgumentException('Speed not supported'); |
959 | } |
960 | |
961 | return $value; |
962 | } |
963 | |
964 | /** |
965 | * Convert speed. |
966 | * |
967 | * @param float $value Value to convert |
968 | * @param string $from Input weight |
969 | * |
970 | * @return float |
971 | * |
972 | * @throws \InvalidArgumentException |
973 | * |
974 | * @since 1.0.0 |
975 | */ |
976 | private static function normalizeSpeed(float $value, string $from) : float |
977 | { |
978 | switch ($from) { |
979 | case SpeedType::KILOMETERS_PER_HOUR: |
980 | break; |
981 | case SpeedType::MILES_PER_DAY: |
982 | $value = $value / 24 * 1.60934; |
983 | break; |
984 | case SpeedType::MILES_PER_HOUR: |
985 | $value *= 1.60934; |
986 | break; |
987 | case SpeedType::MILES_PER_MINUTE: |
988 | $value *= 60 * 1.60934; |
989 | break; |
990 | case SpeedType::MILES_PER_SECOND: |
991 | $value *= 60 * 60 * 1.60934; |
992 | break; |
993 | case SpeedType::KILOMETERS_PER_DAY: |
994 | $value /= 24; |
995 | break; |
996 | case SpeedType::KILOMETERS_PER_MINUTE: |
997 | $value *= 60; |
998 | break; |
999 | case SpeedType::KILOMETERS_PER_SECOND: |
1000 | $value *= 60 * 60; |
1001 | break; |
1002 | case SpeedType::METERS_PER_DAY: |
1003 | $value = $value / 24 / 1000; |
1004 | break; |
1005 | case SpeedType::METERS_PER_HOUR: |
1006 | $value /= 1000; |
1007 | break; |
1008 | case SpeedType::METERS_PER_MINUTE: |
1009 | $value *= 60 / 1000; |
1010 | break; |
1011 | case SpeedType::METERS_PER_SECOND: |
1012 | $value *= 60 * 60 / 1000; |
1013 | break; |
1014 | case SpeedType::CENTIMETERS_PER_DAY: |
1015 | $value = $value / 24 / 100000; |
1016 | break; |
1017 | case SpeedType::CENTIMETERS_PER_HOUR: |
1018 | $value /= 100000; |
1019 | break; |
1020 | case SpeedType::CENTIMETERS_PER_MINUTES: |
1021 | $value *= 60 / 100000; |
1022 | break; |
1023 | case SpeedType::CENTIMETERS_PER_SECOND: |
1024 | $value *= 60 * 60 / 100000; |
1025 | break; |
1026 | case SpeedType::MILLIMETERS_PER_DAY: |
1027 | $value = $value / 24 / 1000000; |
1028 | break; |
1029 | case SpeedType::MILLIMETERS_PER_HOUR: |
1030 | $value /= 1000000; |
1031 | break; |
1032 | case SpeedType::MILLIMETERS_PER_MINUTE: |
1033 | $value *= 60 / 1000000; |
1034 | break; |
1035 | case SpeedType::MILLIMETERS_PER_SECOND: |
1036 | $value *= 60 * 60 / 1000000; |
1037 | break; |
1038 | case SpeedType::YARDS_PER_DAY: |
1039 | $value = $value / 24 * 0.0009144; |
1040 | break; |
1041 | case SpeedType::YARDS_PER_HOUR: |
1042 | $value *= 0.0009144; |
1043 | break; |
1044 | case SpeedType::YARDS_PER_MINUTE: |
1045 | $value *= 60 * 0.0009144; |
1046 | break; |
1047 | case SpeedType::YARDS_PER_SECOND: |
1048 | $value *= 60 * 60 * 0.0009144; |
1049 | break; |
1050 | case SpeedType::INCHES_PER_DAY: |
1051 | $value = $value / 24 * 0.0000254; |
1052 | break; |
1053 | case SpeedType::INCHES_PER_HOUR: |
1054 | $value *= 0.0000254; |
1055 | break; |
1056 | case SpeedType::INCHES_PER_MINUTE: |
1057 | $value *= 60 * 0.0000254; |
1058 | break; |
1059 | case SpeedType::INCHES_PER_SECOND: |
1060 | $value *= 60 * 60 * 0.0000254; |
1061 | break; |
1062 | case SpeedType::FEET_PER_DAY: |
1063 | $value = $value / 24 * 0.0003048; |
1064 | break; |
1065 | case SpeedType::FEET_PER_HOUR: |
1066 | $value *= 0.0003048; |
1067 | break; |
1068 | case SpeedType::FEET_PER_MINUTE: |
1069 | $value *= 60 * 0.0003048; |
1070 | break; |
1071 | case SpeedType::FEET_PER_SECOND: |
1072 | $value *= 60 * 60 * 0.0003048; |
1073 | break; |
1074 | case SpeedType::MACH: |
1075 | $value *= 1225.044; |
1076 | break; |
1077 | case SpeedType::KNOTS: |
1078 | $value *= 1.852; |
1079 | break; |
1080 | default: |
1081 | throw new \InvalidArgumentException('Speed not supported'); |
1082 | } |
1083 | |
1084 | return $value; |
1085 | } |
1086 | |
1087 | /** |
1088 | * Convert speed. |
1089 | * |
1090 | * @param float $value Value to convert |
1091 | * @param string $from Input weight |
1092 | * @param string $to Output weight |
1093 | * |
1094 | * @return float |
1095 | * |
1096 | * @throws \InvalidArgumentException |
1097 | * |
1098 | * @since 1.0.0 |
1099 | */ |
1100 | public static function convertTime(float $value, string $from = TimeType::SECONDS, string $to = TimeType::HOURS) : float |
1101 | { |
1102 | // to seconds |
1103 | $value = self::normalizeTime($value, $from); |
1104 | |
1105 | switch ($to) { |
1106 | case TimeType::SECONDS: |
1107 | break; |
1108 | case TimeType::MINUTES: |
1109 | $value /= 60; |
1110 | break; |
1111 | case TimeType::MILLISECONDS: |
1112 | $value *= 1000; |
1113 | break; |
1114 | case TimeType::HOURS: |
1115 | $value *= 3600; |
1116 | break; |
1117 | case TimeType::DAYS: |
1118 | $value *= 3600 * 24; |
1119 | break; |
1120 | case TimeType::WEEKS: |
1121 | $value *= 3600 * 24 * 7; |
1122 | break; |
1123 | case TimeType::MONTH: |
1124 | $value *= 3600 * 24 * 30; |
1125 | break; |
1126 | case TimeType::QUARTER: |
1127 | $value *= 3600 * 24 * 90; |
1128 | break; |
1129 | case TimeType::YEAR: |
1130 | $value *= 3600 * 24 * 365; |
1131 | break; |
1132 | default: |
1133 | throw new \InvalidArgumentException('Size not supported'); |
1134 | } |
1135 | |
1136 | return $value; |
1137 | } |
1138 | |
1139 | /** |
1140 | * Convert speed. |
1141 | * |
1142 | * @param float $value Value to convert |
1143 | * @param string $from Input weight |
1144 | * |
1145 | * @return float |
1146 | * |
1147 | * @throws \InvalidArgumentException |
1148 | * |
1149 | * @since 1.0.0 |
1150 | */ |
1151 | private static function normalizeTime(float $value, string $from) : float |
1152 | { |
1153 | switch ($from) { |
1154 | case TimeType::SECONDS: |
1155 | break; |
1156 | case TimeType::MINUTES: |
1157 | $value *= 60; |
1158 | break; |
1159 | case TimeType::MILLISECONDS: |
1160 | $value /= 1000; |
1161 | break; |
1162 | case TimeType::HOURS: |
1163 | $value /= 3600; |
1164 | break; |
1165 | case TimeType::DAYS: |
1166 | $value /= 3600 * 24; |
1167 | break; |
1168 | case TimeType::WEEKS: |
1169 | $value /= 3600 * 24 * 7; |
1170 | break; |
1171 | case TimeType::MONTH: |
1172 | $value /= 3600 * 24 * 30; |
1173 | break; |
1174 | case TimeType::QUARTER: |
1175 | $value /= 3600 * 24 * 90; |
1176 | break; |
1177 | case TimeType::YEAR: |
1178 | $value /= 3600 * 24 * 365; |
1179 | break; |
1180 | default: |
1181 | throw new \InvalidArgumentException('Size not supported'); |
1182 | } |
1183 | |
1184 | return $value; |
1185 | } |
1186 | |
1187 | /** |
1188 | * Convert speed. |
1189 | * |
1190 | * @param float $value Value to convert |
1191 | * @param string $from Input weight |
1192 | * @param string $to Output weight |
1193 | * |
1194 | * @return float |
1195 | * |
1196 | * @throws \InvalidArgumentException |
1197 | * |
1198 | * @since 1.0.0 |
1199 | */ |
1200 | public static function convertAngle(float $value, string $from = AngleType::DEGREE, string $to = AngleType::DEGREE) : float |
1201 | { |
1202 | // to degree |
1203 | $value = self::normalizeAngle($value, $from); |
1204 | |
1205 | switch ($to) { |
1206 | case AngleType::DEGREE: |
1207 | break; |
1208 | case AngleType::RADIAN: |
1209 | $value /= 57.296; |
1210 | break; |
1211 | case AngleType::SECOND: |
1212 | $value /= 0.00027778; |
1213 | break; |
1214 | case AngleType::MINUTE: |
1215 | $value /= 0.016667; |
1216 | break; |
1217 | case AngleType::MILLIRADIAN_US: |
1218 | $value /= 0.09; |
1219 | break; |
1220 | case AngleType::MILLIRADIAN_UK: |
1221 | $value /= 0.057296; |
1222 | break; |
1223 | case AngleType::MILLIRADIAN_USSR: |
1224 | $value /= 0.057143; |
1225 | break; |
1226 | case AngleType::MILLIRADIAN_NATO: |
1227 | $value /= 0.056250; |
1228 | break; |
1229 | case AngleType::GRADIAN: |
1230 | $value /= 0.09; |
1231 | break; |
1232 | case AngleType::CENTRAD: |
1233 | $value /= 0.57296; |
1234 | break; |
1235 | default: |
1236 | throw new \InvalidArgumentException('Angle not supported'); |
1237 | } |
1238 | |
1239 | return $value; |
1240 | } |
1241 | |
1242 | /** |
1243 | * Convert speed. |
1244 | * |
1245 | * @param float $value Value to convert |
1246 | * @param string $from Input weight |
1247 | * |
1248 | * @return float |
1249 | * |
1250 | * @throws \InvalidArgumentException |
1251 | * |
1252 | * @since 1.0.0 |
1253 | */ |
1254 | private static function normalizeAngle(float $value, string $from) : float |
1255 | { |
1256 | switch ($from) { |
1257 | case AngleType::DEGREE: |
1258 | break; |
1259 | case AngleType::RADIAN: |
1260 | $value *= 57.296; |
1261 | break; |
1262 | case AngleType::SECOND: |
1263 | $value *= 0.00027778; |
1264 | break; |
1265 | case AngleType::MINUTE: |
1266 | $value *= 0.016667; |
1267 | break; |
1268 | case AngleType::MILLIRADIAN_US: |
1269 | $value *= 0.09; |
1270 | break; |
1271 | case AngleType::MILLIRADIAN_UK: |
1272 | $value *= 0.057296; |
1273 | break; |
1274 | case AngleType::MILLIRADIAN_USSR: |
1275 | $value *= 0.057143; |
1276 | break; |
1277 | case AngleType::MILLIRADIAN_NATO: |
1278 | $value *= 0.056250; |
1279 | break; |
1280 | case AngleType::GRADIAN: |
1281 | $value *= 0.09; |
1282 | break; |
1283 | case AngleType::CENTRAD: |
1284 | $value *= 0.57296; |
1285 | break; |
1286 | default: |
1287 | throw new \InvalidArgumentException('Angle not supported'); |
1288 | } |
1289 | |
1290 | return $value; |
1291 | } |
1292 | |
1293 | /** |
1294 | * Convert speed. |
1295 | * |
1296 | * @param float $value Value to convert |
1297 | * @param string $from Input weight |
1298 | * @param string $to Output weight |
1299 | * |
1300 | * @return float |
1301 | * |
1302 | * @throws \InvalidArgumentException |
1303 | * |
1304 | * @since 1.0.0 |
1305 | */ |
1306 | public static function convertPressure(float $value, string $from = PressureType::PASCALS, string $to = PressureType::BAR) : float |
1307 | { |
1308 | // to pascals |
1309 | $value = self::normalizePressure($value, $from); |
1310 | |
1311 | switch ($to) { |
1312 | case PressureType::PASCALS: |
1313 | break; |
1314 | case PressureType::BAR: |
1315 | $value /= 100000; |
1316 | break; |
1317 | case PressureType::POUND_PER_SQUARE_INCH: |
1318 | $value *= 0.00014504; |
1319 | break; |
1320 | case PressureType::ATMOSPHERES: |
1321 | $value /= 101325; |
1322 | break; |
1323 | case PressureType::INCHES_OF_MERCURY: |
1324 | $value *= 0.00029530; |
1325 | break; |
1326 | case PressureType::INCHES_OF_WATER: |
1327 | $value *= 0.0040146; |
1328 | break; |
1329 | case PressureType::MILLIMETERS_OF_WATER: |
1330 | $value *= 0.10197; |
1331 | break; |
1332 | case PressureType::MILLIMETERS_OF_MERCURY: |
1333 | $value *= 0.0075006; |
1334 | break; |
1335 | case PressureType::MILLIBAR: |
1336 | $value /= 100; |
1337 | break; |
1338 | case PressureType::KILOGRAM_PER_SQUARE_METER: |
1339 | $value *= 0.10197; |
1340 | break; |
1341 | case PressureType::NEWTONS_PER_METER_SQUARED: |
1342 | break; |
1343 | case PressureType::POUNDS_PER_SQUARE_FOOT: |
1344 | $value *= 0.020885; |
1345 | break; |
1346 | case PressureType::TORRS: |
1347 | $value *= 0.0075006; |
1348 | break; |
1349 | default: |
1350 | throw new \InvalidArgumentException('Size not supported'); |
1351 | } |
1352 | |
1353 | return $value; |
1354 | } |
1355 | |
1356 | /** |
1357 | * Convert speed. |
1358 | * |
1359 | * @param float $value Value to convert |
1360 | * @param string $from Input weight |
1361 | * |
1362 | * @return float |
1363 | * |
1364 | * @throws \InvalidArgumentException |
1365 | * |
1366 | * @since 1.0.0 |
1367 | */ |
1368 | private static function normalizePressure(float $value, string $from) : float |
1369 | { |
1370 | switch ($from) { |
1371 | case PressureType::PASCALS: |
1372 | break; |
1373 | case PressureType::BAR: |
1374 | $value *= 100000; |
1375 | break; |
1376 | case PressureType::POUND_PER_SQUARE_INCH: |
1377 | $value /= 0.00014504; |
1378 | break; |
1379 | case PressureType::ATMOSPHERES: |
1380 | $value *= 101325; |
1381 | break; |
1382 | case PressureType::INCHES_OF_MERCURY: |
1383 | $value /= 0.00029530; |
1384 | break; |
1385 | case PressureType::INCHES_OF_WATER: |
1386 | $value /= 0.0040146; |
1387 | break; |
1388 | case PressureType::MILLIMETERS_OF_WATER: |
1389 | $value /= 0.10197; |
1390 | break; |
1391 | case PressureType::MILLIMETERS_OF_MERCURY: |
1392 | $value /= 0.0075006; |
1393 | break; |
1394 | case PressureType::MILLIBAR: |
1395 | $value *= 100; |
1396 | break; |
1397 | case PressureType::KILOGRAM_PER_SQUARE_METER: |
1398 | $value /= 0.10197; |
1399 | break; |
1400 | case PressureType::NEWTONS_PER_METER_SQUARED: |
1401 | break; |
1402 | case PressureType::POUNDS_PER_SQUARE_FOOT: |
1403 | $value /= 0.020885; |
1404 | break; |
1405 | case PressureType::TORRS: |
1406 | $value /= 0.0075006; |
1407 | break; |
1408 | default: |
1409 | throw new \InvalidArgumentException('Size not supported'); |
1410 | } |
1411 | |
1412 | return $value; |
1413 | } |
1414 | |
1415 | /** |
1416 | * Convert speed. |
1417 | * |
1418 | * @param float $value Value to convert |
1419 | * @param string $from Input weight |
1420 | * @param string $to Output weight |
1421 | * |
1422 | * @return float |
1423 | * |
1424 | * @throws \InvalidArgumentException |
1425 | * |
1426 | * @since 1.0.0 |
1427 | */ |
1428 | public static function convertEnergy(float $value, string $from = EnergyPowerType::JOULS, string $to = EnergyPowerType::KILOWATT_HOUERS) : float |
1429 | { |
1430 | $value = self::normalizeEnergy($value, $from); |
1431 | |
1432 | switch ($to) { |
1433 | case EnergyPowerType::JOULS: |
1434 | break; |
1435 | case EnergyPowerType::KILOWATT_HOUERS: |
1436 | $value *= 0.00000027778; |
1437 | break; |
1438 | case EnergyPowerType::MEGAWATT_HOUERS: |
1439 | $value *= 0.00000000027778; |
1440 | break; |
1441 | case EnergyPowerType::KILOTONS: |
1442 | $value *= 0.00000000000023901; |
1443 | break; |
1444 | case EnergyPowerType::CALORIES: |
1445 | $value *= 0.00023885; |
1446 | break; |
1447 | case EnergyPowerType::BTU: |
1448 | $value *= 0.00094782; |
1449 | break; |
1450 | case EnergyPowerType::KILOJOULS: |
1451 | $value *= 0.0010000; |
1452 | break; |
1453 | case EnergyPowerType::THERMEC: |
1454 | $value *= 0.0000000094782; |
1455 | break; |
1456 | case EnergyPowerType::NEWTON_METERS: |
1457 | break; |
1458 | default: |
1459 | throw new \InvalidArgumentException('Energy not supported'); |
1460 | } |
1461 | |
1462 | return $value; |
1463 | } |
1464 | |
1465 | /** |
1466 | * Convert speed. |
1467 | * |
1468 | * @param float $value Value to convert |
1469 | * @param string $from Input weight |
1470 | * |
1471 | * @return float |
1472 | * |
1473 | * @throws \InvalidArgumentException |
1474 | * |
1475 | * @since 1.0.0 |
1476 | */ |
1477 | private static function normalizeEnergy(float $value, string $from) : float |
1478 | { |
1479 | switch ($from) { |
1480 | case EnergyPowerType::JOULS: |
1481 | break; |
1482 | case EnergyPowerType::KILOWATT_HOUERS: |
1483 | $value /= 0.00000027778; |
1484 | break; |
1485 | case EnergyPowerType::MEGAWATT_HOUERS: |
1486 | $value /= 0.00000000027778; |
1487 | break; |
1488 | case EnergyPowerType::KILOTONS: |
1489 | $value /= 0.00000000000023901; |
1490 | break; |
1491 | case EnergyPowerType::CALORIES: |
1492 | $value /= 0.00023885; |
1493 | break; |
1494 | case EnergyPowerType::BTU: |
1495 | $value /= 0.00094782; |
1496 | break; |
1497 | case EnergyPowerType::KILOJOULS: |
1498 | $value /= 0.0010000; |
1499 | break; |
1500 | case EnergyPowerType::THERMEC: |
1501 | $value /= 0.0000000094782; |
1502 | break; |
1503 | case EnergyPowerType::NEWTON_METERS: |
1504 | break; |
1505 | default: |
1506 | throw new \InvalidArgumentException('Energy not supported'); |
1507 | } |
1508 | |
1509 | return $value; |
1510 | } |
1511 | |
1512 | /** |
1513 | * File size. |
1514 | * |
1515 | * @param float $value Value to convert |
1516 | * @param string $from Input weight |
1517 | * @param string $to Output weight |
1518 | * |
1519 | * @return float |
1520 | * |
1521 | * @throws \InvalidArgumentException |
1522 | * |
1523 | * @since 1.0.0 |
1524 | */ |
1525 | public static function convertFileSize(float $value, string $from = FileSizeType::BYTE, string $to = FileSizeType::MEGABYTE) : float |
1526 | { |
1527 | // to byte |
1528 | $value = self::normalizeFileSize($value, $from); |
1529 | |
1530 | switch ($to) { |
1531 | case FileSizeType::BYTE: |
1532 | break; |
1533 | case FileSizeType::KILOBYTE: |
1534 | $value /= 1000; |
1535 | break; |
1536 | case FileSizeType::MEGABYTE: |
1537 | $value /= 1000000; |
1538 | break; |
1539 | case FileSizeType::GIGABYTE: |
1540 | $value /= 1000000000; |
1541 | break; |
1542 | case FileSizeType::TERRABYTE: |
1543 | $value /= 1000000000000; |
1544 | break; |
1545 | case FileSizeType::BIT: |
1546 | $value *= 8; |
1547 | break; |
1548 | case FileSizeType::KILOBIT: |
1549 | $value *= 0.008; |
1550 | break; |
1551 | case FileSizeType::MEGABIT: |
1552 | $value *= 0.000008; |
1553 | break; |
1554 | case FileSizeType::GIGABIT: |
1555 | $value *= 8e-9; |
1556 | break; |
1557 | case FileSizeType::TERRABIT: |
1558 | $value *= 8e-12; |
1559 | break; |
1560 | default: |
1561 | throw new \InvalidArgumentException('Size not supported'); |
1562 | } |
1563 | |
1564 | return $value; |
1565 | } |
1566 | |
1567 | /** |
1568 | * File size. |
1569 | * |
1570 | * @param float $value Value to convert |
1571 | * @param string $from Input weight |
1572 | * |
1573 | * @return float |
1574 | * |
1575 | * @throws \InvalidArgumentException |
1576 | * |
1577 | * @since 1.0.0 |
1578 | */ |
1579 | private static function normalizeFileSize(float $value, string $from) : float |
1580 | { |
1581 | switch ($from) { |
1582 | case FileSizeType::BYTE: |
1583 | break; |
1584 | case FileSizeType::KILOBYTE: |
1585 | $value *= 1000; |
1586 | break; |
1587 | case FileSizeType::MEGABYTE: |
1588 | $value *= 1000000; |
1589 | break; |
1590 | case FileSizeType::GIGABYTE: |
1591 | $value *= 1000000000; |
1592 | break; |
1593 | case FileSizeType::TERRABYTE: |
1594 | $value *= 1000000000000; |
1595 | break; |
1596 | case FileSizeType::BIT: |
1597 | $value /= 8; |
1598 | break; |
1599 | case FileSizeType::KILOBIT: |
1600 | $value /= 0.008; |
1601 | break; |
1602 | case FileSizeType::MEGABIT: |
1603 | $value /= 0.000008; |
1604 | break; |
1605 | case FileSizeType::GIGABIT: |
1606 | $value /= 8e-9; |
1607 | break; |
1608 | case FileSizeType::TERRABIT: |
1609 | $value /= 8e-12; |
1610 | break; |
1611 | default: |
1612 | throw new \InvalidArgumentException('Size not supported'); |
1613 | } |
1614 | |
1615 | return $value; |
1616 | } |
1617 | } |