PHP: Vypísanie času trochu ináč

V dnešnom článku nájdete návod, ako vypísať čas „v ľudskom formáte“. Teda namiesto presného času nejakej akcie budeme vypisovať kedy k danej akcii došlo. Napríklad „pred minútou“, „pred 4 hodinami“, „včera“…

Samozrejme možností ako vyriešiť tento problém je viac, ale ja som si vytvoril nasledovnú funkciu presne spĺňajúcu moje požiadavky.

function human_time($time, $threshold = 1) {
	$current_time = time();
	
	$diff = $current_time - $time;
	
	if($diff < $threshold)
		return 'teraz';
		
	if($diff < 60) {
		$diff = round($diff);
		return 'pred ' . sklonuj($diff, 'sekundou', '% sekundami', '% sekundami');
	}
	
	if($diff < 3600) {
		$diff = round($diff / 60);
		return 'pred ' . sklonuj($diff, 'minútou', '% minútami', '% minútami');	
	}
	
	if($diff < 3600*24) {
		$diff = round($diff / 3600);
		return 'pred ' . sklonuj($diff, 'hodinou', '% hodinami', '% hodinami');	
	}
	
	if($diff < 3600*24*7) {
		$diff = round($diff / (3600 * 24));
		if($diff == 1)
			return "včera";
		return 'pred ' . sklonuj($diff, 'dňom', '% dňami', '% dňami');
	}
	
	$diff = round($diff / (3600 * 24 * 7));
	return 'pred ' . sklonuj($diff, 'týždňom', '% týždňami', '% týždňami');
}

Použitie je veľmi jednoduché. Prvý povinný parameter je čas akcie (unix time), ktorý chceme vypísať a druhým nepovinným parametrom je prah (prednastavená je jedna sekunda), kedy sa bude vypisovať „teraz“.

// v $time je čas vykonania akcie...
human_time($time);

Ak ste čítali pozorne, tak ste si všimli, že v kóde je použitá funkcia sklonuj(), ktorú nájdete v článku o skloňovaní v PHP.

A ešte jedna vec. Vo WordPresse nájdete funkciu human_time_diff(), ktorá robí to isté, avšak v závislosti od použitia môže nastať problém so skloňovaním (napríklad pri slovenčine) a aj preto som si napísal pre tento účel vlastnú funkciu.

Pridajte sa do konverzácie

1 komentár

  1. Zabudol si este vymenit % za Int,

    echo human_time($nejakyCas); // vypise pred „pred % tyzdnami“

    ale inak dobry napad..

Zanechať komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *