feat(utils): 增加了转换存储空间大小的函数

byte -> b/kb/mb/gb/tb/pb

Signed-off-by: 李东云 <dongyun.li@luxcreo.ai>
This commit is contained in:
李东云
2022-07-05 17:14:06 +08:00
parent 46d7f357bd
commit 153c7498cf

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace Singularity\HDK\Utils\Service;
use Closure;
@@ -237,15 +239,60 @@ class UtilsService
ArrayShape(['size' => 'float', 'unit' => 'string']),
Pure
]
public function convertMemorySize(
public function convertStorageSize(
float|int|string $size,
bool $unitToUpper = false,
int $precision = 2
): array {
$unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb'];
$i = floor(log($size, 1024));
if ($size > 0) {
$i = floor(log($size, 1024));
$size = round($size / pow(1024, $i), $precision);
} else {
$i = 0;
$size = 0;
}
return [
'size' => round($size / pow(1024, $i), $precision),
'size' => $size,
'unit' => $unitToUpper ? strtoupper($unit[$i]) : $unit[$i],
];
}
/**
* 将时长转换为带单位时间
*
* @param int|float $duration 时长单位ms
* @param bool $unitToUpper
* @param bool $format
* @param integer $precision
*
* @return array
*/
#[
ArrayShape([
'duration' => 'float',
'unit' => 'string',
])
]
public function convertDuration(
int|float $duration,
bool $unitToUpper = false,
bool $format = true,
int $precision = 3
): array {
$unit = ['ms', 's'];
if ($duration > 1) {
$i = floor(log($duration, 1000));
$duration = round($duration / pow(1000, $i), $precision);
} elseif ($duration < 1) {
$i = 0;
} else {
$i = 0;
$duration = 0;
}
return [
'duration' => $format ? number_format($duration, $precision) : $duration,
'unit' => $unitToUpper ? strtoupper($unit[$i]) : $unit[$i],
];
}