mirror of
https://github.com/YGGverse/HLState.git
synced 2025-03-12 13:31:24 +00:00
add ago time format
This commit is contained in:
parent
d83764e453
commit
6714546199
@ -30,3 +30,9 @@ services:
|
||||
|
||||
# add more service definitions when explicit configuration is needed
|
||||
# please note that last definitions always *replace* previous ones
|
||||
|
||||
App\Twig\AppExtension:
|
||||
arguments:
|
||||
- '@service_container'
|
||||
tags:
|
||||
- { name: twig.extension}
|
115
src/Twig/AppExtension.php
Normal file
115
src/Twig/AppExtension.php
Normal file
@ -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)]];
|
||||
}
|
||||
}
|
@ -41,8 +41,16 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-align-left">{{ server.info.Map }}</td>
|
||||
<td class="text-align-left">{{ server.added | format_date }}</td>
|
||||
<td class="text-align-left">{{ server.online | format_date }}</td>
|
||||
<td class="text-align-left">
|
||||
<span title="{{ server.added | date('r') }}">
|
||||
{{ server.added | format_ago }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-align-left">
|
||||
<span title="{{ server.online | date('r') }}">
|
||||
{{ server.online | format_ago }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-align-center">{{ server.connections }}{#{{ server.info.Players }}#}</td>
|
||||
<td class="text-align-center">{{ server.info.MaxPlayers }}</td>
|
||||
<td class="text-align-center">{{ server.info.Bots }}</td>
|
||||
|
@ -135,7 +135,11 @@
|
||||
</tr>
|
||||
{% for online in server.online %}
|
||||
<tr>
|
||||
<td class="text-align-left">{{ online.time | date('r') }}</td>
|
||||
<td class="text-align-left">
|
||||
<span title="{{ online.time | date('r') }}">
|
||||
{{ online.time | format_ago }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-align-center">{{ online.players }}</td>
|
||||
<td class="text-align-center">{{ online.bots }}</td>
|
||||
<td class="text-align-center">{{ online.total }}</td>
|
||||
@ -170,8 +174,16 @@
|
||||
<tr>
|
||||
<td class="text-align-center">{{ player.frags }}</td>
|
||||
<td class="text-align-left">{{ player.name }}</td>
|
||||
<td class="text-align-left">{{ player.joined | format_date }}</td>
|
||||
<td class="text-align-left">{{ player.online | format_date }}</td>
|
||||
<td class="text-align-left">
|
||||
<span title="{{ player.joined | date('r') }}">
|
||||
{{ player.joined | format_ago }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-align-left">
|
||||
<span title="{{ player.online | date('r') }}">
|
||||
{{ player.online | format_ago }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
Loading…
x
Reference in New Issue
Block a user