Formát času (před hodinou, včera, …)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- David Krupička
- Člen | 45
Ahoj, potřeboval bych při zobrazování času vytvořit formát jako je zde na foru při přidávání příspěvků. Např. před minutou, včera, před 2 dny atd.. nevím vůbec pod čím to hledat. Nemáte někdo nějaký tip?
- Pavel Kravčík
- Člen | 1196
Diff si převeď na sekundy a jednoduchý if.
if($diff < 60)
{
echo "Nedávno";
}
elseif($diff < 3600)
{
echo "Před " . floor($diff/60) . " minutami";
}
...
Editoval Pavel Kravčík (15. 2. 2017 12:23)
- Martk
- Člen | 661
Zadat timeago do googlu nebo githubu. Toto je v php a v češtině, můžeš vyzkoušet: https://github.com/…php-time-ago
- blaztar
- Člen | 93
U mě funguje toto, kdysi to měl David Grudl někde na githubu tuším (možná to je to co je použito zde na fóru). mám to jako filtr:
services:
- Front\Filter\ForHumans
nette.latteFactory:
setup:
- addFilter('forHumans', @Front\Filter\ForHumans)
<?php
namespace Front\Filter;
use Nette;
class ForHumans extends Nette\Object
{
public function __invoke($time)
{
if (!$time) {
return false;
} elseif (is_numeric($time)) {
$time = (int) $time;
} elseif ($time instanceof \DateTime) {
$time = $time->format('U');
} else {
$time = strtotime($time);
}
$delta = time() - $time;
if ($delta < 0) {
$delta = round(abs($delta) / 60);
if ($delta === 0) {
return 'za okamžik';
}
if ($delta === 1) {
return 'za minutu';
}
if ($delta < 45) {
return 'za '.$delta.' '.self::plural($delta, 'minuta', 'minuty', 'minut');
}
if ($delta < 90) {
return 'za hodinu';
}
if ($delta < 1440) {
return 'za '.round($delta / 60).' '.self::plural(round($delta / 60), 'hodina', 'hodiny', 'hodin');
}
if ($delta < 2880) {
return 'zítra';
}
if ($delta < 43200) {
return 'za '.round($delta / 1440).' '.self::plural(round($delta / 1440), 'den', 'dny', 'dní');
}
if ($delta < 86400) {
return 'za měsíc';
}
if ($delta < 525960) {
return 'za '.round($delta / 43200).' '.self::plural(round($delta / 43200), 'měsíc', 'měsíce', 'měsíců');
}
if ($delta < 1051920) {
return 'za rok';
}
return 'za '.round($delta / 525960).' '.self::plural(round($delta / 525960), 'rok', 'roky', 'let');
}
$delta = round($delta / 60);
if ($delta === 0) {
return 'před okamžikem';
}
if ($delta === 1) {
return 'před minutou';
}
if ($delta < 45) {
return "před $delta minutami";
}
if ($delta < 90) {
return 'před hodinou';
}
if ($delta < 1440) {
return 'před '.round($delta / 60).' hodinami';
}
if ($delta < 2880) {
return 'včera';
}
if ($delta < 43200) {
return 'před '.round($delta / 1440).' dny';
}
if ($delta < 86400) {
return 'před měsícem';
}
if ($delta < 525960) {
return 'před '.round($delta / 43200).' měsíci';
}
if ($delta < 1051920) {
return 'před rokem';
}
return 'před '.round($delta / 525960).' lety';
}
private static function plural($n)
{
$args = func_get_args();
return $args[($n === 1) ? 1 : (($n >= 2 && $n <= 4) ? 2 : 3)];
}
}
Editoval blaztar (15. 2. 2017 12:42)