Files
UNIT3D/app/Helpers/StringHelper.php
Roardom 1eab41af1a fix: time elapsed calculation type warning
Sometimes an average seedtime is passed into here which isn't an int. This function currently only supports units above one second, so cast to int first.
2024-10-25 05:44:14 +00:00

77 lines
1.8 KiB
PHP
Executable File

<?php
declare(strict_types=1);
/**
* NOTICE OF LICENSE.
*
* UNIT3D Community Edition is open-sourced software licensed under the GNU Affero General Public License v3.0
* The details is bundled with this project in the file LICENSE.txt.
*
* @project UNIT3D Community Edition
*
* @author HDVinnie <hdinnovations@protonmail.com>
* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0
*/
namespace App\Helpers;
class StringHelper
{
private const array units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'];
private const array secondsPer = [
'year' => 3600 * 24 * 365,
'month' => 3600 * 24 * 30,
'week' => 3600 * 24 * 7,
'day' => 3600 * 24,
'hour' => 3600,
'minute' => 60,
'second' => 1,
];
public static function formatBytes(int|float $bytes = 0, int $precision = 2): string
{
$minus = false;
if ($bytes < 0) {
$minus = true;
$bytes *= -1;
}
for ($i = 0; ($bytes / 1024) > 0.9 && ($i < \count(self::units) - 1); $i++) {
$bytes /= 1024;
}
$result = round($bytes, $precision);
if ($minus) {
$result *= -1;
}
return $result."\u{a0}".self::units[$i];
}
public static function timeElapsed(int|float $seconds): string
{
$seconds = \intval($seconds);
if ($seconds == 0) {
return 'N/A';
}
$units = [];
foreach (self::secondsPer as $unit => $secondsPer) {
$magnitude = intdiv($seconds, $secondsPer);
if ($magnitude > 0) {
$units[] = $magnitude.trans('common.abbrev-'.$unit.'s');
$seconds -= $magnitude * $secondsPer;
}
}
return implode($units);
}
}