Dynamický update času „před X minutami“

V případě, že se na stránce zobrazuje místo běžného data text typu „zasláno před 1 hodinou“, je dobré tento údaj JavaScriptem průběžně aktualisovat.

Pro získání slovní representace kalendářního data v PHP se perfektně hodí funkce timeAgoInWords, která obsahuje i správné české skloňování.

Pro docílení průběžné aktualisace času stačí tedy:

  1. Převést PHP funkci do JS.
  2. Vytvořit funkci, co projde všechny příslušné elementy a upraví jejich obsah.
  3. Tato funkce se bude spouštět opakovaně (například každou minutu).

Živá ukázka hotového řešení

Element <time>

Pro uvedení data/času se nabízí použít HTML značku <time>. Slovní representace času bude jako její obsah (v JS innerHTML). Skutečný a strojově čitelný datum potom bude v atributu datetime.

<time datetime="2014-07-04T10:37:00">
  Před X hodinami
</time>

Původní obsah může buď vypsat PHP, nebo se první JavaScriptový update času spustí ihned po načtení stránky.

Písmeno T mezi datem a časem je kvůli Firefoxu a IE, které si s běžným 2014-07-04 10:37:00 neporadí.

Nepřesnosti

Komplikace přináší fakt, že datum na straně klienta (v JavaScriptu) nemusí a nejspíš také nebude shodné s časem na serveru.

Časová pásma

Je tedy poměrně vhodné u data a času uvést na straně serveru časové pásmo:

<time datetime="2014-07-04T10:37:00+02:00">
  Před X hodinami/měsíci/roky
</time>

Přesnější doba prodlevy

Je potřeba si zvážit do jaké míry má být údaj přesný.

V případě počítání rozdílu mezi časem ze serveru a od návštěvníka to nejspíš žádná sláva nebude (přesný/stejný čas by musel mít nastaven návštěvník i server).

Nabízejí se následující řešení:

  1. Čas pro zjišťování rozdílu si zjišťovat AJAXem ze serveru. Zvlášť v případě, že je na stránce nějaké automatické kontrolování nového obsahu, není problém do odpovědi serveru přibalit hodnotu aktuálního data.

  2. Při načtení stránky si do jedné JS proměnné vypsat čas na serveru a do druhé aktuální čas klienta. Z toho potom počítat nepřesnost mezi časy a výsledný rozdíl tak upravit.

  3. Na serveru si do <time> vypsat přímo počet sekund. V JavaScriptu si uložit do proměnné čas klienta a při spuštění aktualisace ho odečíst od aktuálního klientského času. Tento rozdíl se potom přičte k rozdílu ze serveru a výsledek je připraven.

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Fixní postranní panel

Jak vytvořit fixovaný banner?

JavaScriptové řešení prvku, který při rolování zůstane stále viditelný.

Aktivování/deaktivování okna

Zachycení aktivování a deaktivování okna v JS

V JavaScriptu lze relativně snadno reagovat na aktivování nebo deaktivování okna/záložky/tabu.

Baterka v CSS a JavaScriptu

Vytvoření efektu baterky v CSS a JS

Jak jednoduše vytvořit na stránce efekt baterky? Tedy ztmavit web a prohlížet ho jakýmsi průzorem.

Test existence obrázku JavaScriptem

Ověření existence obrázku pomocí JS

Jak JavaScriptem ověřit existenci obrázku?

Načtení obrázku, až když je potřeba

Zpožděné načtení obrázku, až když je potřeba

Kromě potřeby nahrát obrázek dopředu (preload), aby byl v době použití 100% připravený, může být potřeba opačná – načíst jej, až v momentě, kdy je potřeba. Z důvodu nemrhání datovým přenosem.

Komentáře