mirror of https://github.com/YGGverse/HLState.git
ghost
10 months ago
4 changed files with 146 additions and 5 deletions
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
<?php |
||||
|
||||
namespace App\Twig; |
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface; |
||||
use Symfony\Contracts\Translation\TranslatorInterface; |
||||
use Twig\Extension\AbstractExtension; |
||||
use Twig\TwigFilter; |
||||
|
||||
class AppExtension extends AbstractExtension |
||||
{ |
||||
protected ContainerInterface $container; |
||||
protected TranslatorInterface $translator; |
||||
|
||||
public function __construct( |
||||
ContainerInterface $container, |
||||
TranslatorInterface $translator |
||||
) |
||||
{ |
||||
$this->container = $container; |
||||
$this->translator = $translator; |
||||
} |
||||
|
||||
public function getFilters() |
||||
{ |
||||
return |
||||
[ |
||||
new TwigFilter( |
||||
'format_ago', |
||||
[ |
||||
$this, |
||||
'formatAgo' |
||||
] |
||||
) |
||||
]; |
||||
} |
||||
|
||||
public function formatAgo( |
||||
int $time, |
||||
): string |
||||
{ |
||||
$diff = time() - $time; |
||||
|
||||
if ($diff < 1) |
||||
{ |
||||
return $this->translator->trans('now'); |
||||
} |
||||
|
||||
$values = |
||||
[ |
||||
365 * 24 * 60 * 60 => |
||||
[ |
||||
$this->translator->trans('year ago'), |
||||
$this->translator->trans('years ago'), |
||||
$this->translator->trans(' years ago') |
||||
], |
||||
30 * 24 * 60 * 60 => |
||||
[ |
||||
$this->translator->trans('month ago'), |
||||
$this->translator->trans('months ago'), |
||||
$this->translator->trans(' months ago') |
||||
], |
||||
24 * 60 * 60 => |
||||
[ |
||||
$this->translator->trans('day ago'), |
||||
$this->translator->trans('days ago'), |
||||
$this->translator->trans(' days ago') |
||||
], |
||||
60 * 60 => |
||||
[ |
||||
$this->translator->trans('hour ago'), |
||||
$this->translator->trans('hours ago'), |
||||
$this->translator->trans(' hours ago') |
||||
], |
||||
60 => |
||||
[ |
||||
$this->translator->trans('minute ago'), |
||||
$this->translator->trans('minutes ago'), |
||||
$this->translator->trans(' minutes ago') |
||||
], |
||||
1 => |
||||
[ |
||||
$this->translator->trans('second ago'), |
||||
$this->translator->trans('seconds ago'), |
||||
$this->translator->trans(' seconds ago') |
||||
] |
||||
]; |
||||
|
||||
foreach ($values as $key => $value) |
||||
{ |
||||
$result = $diff / $key; |
||||
|
||||
if ($result >= 1) |
||||
{ |
||||
$round = round($result); |
||||
|
||||
return sprintf( |
||||
'%s %s', |
||||
$round, |
||||
$this->plural( |
||||
$round, |
||||
$value |
||||
) |
||||
); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private function plural(int $number, array $texts) |
||||
{ |
||||
$cases = [2, 0, 1, 1, 1, 2]; |
||||
|
||||
return $texts[(($number % 100) > 4 && ($number % 100) < 20) ? 2 : $cases[min($number % 10, 5)]]; |
||||
} |
||||
} |
Loading…
Reference in new issue