blog.ijacek007.cz

Blog o všem trochu jinak.

Nedávno jsem narazil na problém, kdy jsem potřeboval automaticky načítat obsah stránky velice jednoduchým skriptem se zobrazením času odpočtu. Po hledání jsem našel kód, který ve spojení s php správně funguje a rozhodl jsem se, že jej zde zveřejním, abych ušetřil práci všem, kteří by podobný postup hledali v budoucnu.


Pohled na kód odpočítávacího skriptu.

Požadavek byl přitom jednoduchý. Nechtěl jsem využívat žádné externí knihovny a velké kusy kódu. Jednoduše jsem chtěl vytvořit JavaScriptový odpočet, který bude odčítat zvolený čas, a navíc bude do aktuální odpočet vkládat do specifického prvku, který bude na stránce zobrazen tak, aby na stránce bylo jasně vidět za jak dlouho se stránka znovu načte. Nejprve jsem našel příklad takto vytvořeného souboru na portálu w3schools.com přesně takový skript. Ten ze zvoleného data v americkém formátu začne odpočítávat čas, který ještě k tomu převádí na počet dní hodin minut a vteřin. Navíc tento údaj předá do specifického souboru a na stránce tak ono počítadlo lze jednoduše zobrazit.

<!-- Display the countdown timer in an element -->
<p id="demo"></p>

<script>
// Set the date we're counting down to
var countDownDate = new Date("Jan 5, 2024 15:37:25").getTime();

// Update the count down every 1 second
var x = setInterval(function() {

  // Get today's date and time
  var now = new Date().getTime();

  // Find the distance between now and the count down date
  var distance = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";

  // If the count down is finished, write some text
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

Ukázkový a velmi jednoduchý skript už tedy máme a teď jak jej spojit s php a posouvat cílový čas s přesností na vteřiny, aniž bychom se museli prokousávat americkým formátem času a provádět na něm výpočty? Řešení je překvapivě jednoduché. Stačí když si čas převedeme do unix formátu. Ten totiž počítá počet vteřin od okamžiku koordinovaného světového času 00:00:00 1. ledna 1970. Vezmeme tedy čas, který chceme, aby stránka odčítala ve vteřinách. To je v našem případě 20 vteřin. Těchto 20 vteřin připočteme k aktuálnímu času a tento nový čas převedeme pomocí GMdate funkce na formát, kterému skript rozumí. Pak stačí zavolat onen JavaScript z příkladu a na konci jej nahradit příkazem na automatický reload stránky location.reload();. Kdekoliv na stránce také můžeme využít jakéhokoliv html prvku id=„casovac“ a javascript prvek doplní o aktuální hodnotu počítadla. Krása JavaScriptu je navíc taková, že můžete kód vkládat kdekoliv na stránce. I když je správná definice přímo v hlavičce, funguje kdekoliv v dokumentu, a tak pokud to není technicky možné, bude tento malý kus kódu dělat svou práci a načítat novou stránku i bez nutností zasahovat do hlaviček.

$reload = '20';
$ted = date("Y-m-d H:i:s");
$ted_unix = strtotime($ted);
$unix_new = $ted_unix + $reload + 7200;
$datum_cil = gmdate("M d, Y H:i:s", $unix_new);

echo '<script>
// Set the date were counting down to
var countDownDate = new Date("'.$datum_cil.'").getTime();

// Update the count down every 1 second
var x = setInterval(function() {

 // Get todays date and time
 var now = new Date().getTime();

 // Find the distance between now and the count down date
 var distance = countDownDate - now;

 // Time calculations for days, hours, minutes and seconds
 var days = Math.floor(distance / (1000 * 60 * 60 * 24));
 var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
 var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
 var seconds = Math.floor((distance % (1000 * 60)) / 1000);

 // Display the result in the element with id="demo"
 document.getElementById("casovac").innerHTML =  seconds + "s ";

 // If the count down is finished, write some text
 if (distance < 0) {
   clearInterval(x);
   document.getElementById("casovac").innerHTML = "RELOAD";
   location.reload();
 }
}, 1000);
</script>';



 echo ' Reload stránky za <b id="casovac"></b>';

Doufám, že se bude tento malý kus kódu líbit a minimálně ušetří nějaký čas hledáním. Schválně dejte do komentářů vědět, jestli jste našli optimálnější způsob, který by fungoval tak jednoduše, a přitom spolehlivě bez externích knihoven, a přitom se zobrazením údajů samotného počítadla.

Mohlo by vás zajímat

Puvodní sktipt ze kterého jsem vycházel z portálu w3schools.com

Unix time popis na Wikipedii

Skript na automatické restartování počítače s logováním


Štítky článku myslenky | programovani | www-stranky |
Autor Ijacek.007 18.09.2022 zobrazeno 330x
Předchozí článek Jak opravit poškozený videosoubor z dronu DJI


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 313. Poslech všech dohromady zabral přes 4076 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 45% tedy 140 audioknih.

Aktuálně poslouchaná audioknihakniha je Enderova hra

Poslední hodnocenou audioknihou je Černobyl Hodnocení audioknihy 4.5/5.

Nejlépe hodnocenou audioknihou je Astronautův průvodce životem na Zemi Hodnocení audioknihy 4.5/5.

Reklama