Autor Zpráva
romanic
Profil *
Potřeboval bych skript na odpočívatadlo k určitému datu a hodině. (Např: do 10.října 10.00 zbývá ...)
Na netu jsem našek jen ke dnu.

Díky za radu
Joker
Profil
To je relativně jednoduché, kdysi jsem dokonce napsal i PHP skript, který umožňuje různé druhy odpočítávání, nastavit odpočítávání proměnnou přes GET a podobně :-)

Ale pro Vaše použití viz zde: http://skripty.webz.cz/countdown.php?t=1197414000&typ=dhmss

stačí se mrknout na zdrojový kód.
Ten skript už je trochu starší a možná není ani úplně optimální, kdyžtak mi ho někdo opravte ;)

Poznámka: konkrétně to odpočítávadlo počítá do 12. prosince 2007 ;-)
Cíl odpočtu se ve skriptu nastavuje tady:

var cil = 1197414000;
to číslo je časové razítko (timestamp) času, do kterého se odpočítává.
peta
Profil
jakspatweb - javascript - priklady - datum a cas
google - javascript timeout script example
terabajt
Profil
Zdravim, potřeboval bych poradit jak udělat odpočítávání času, jestli by jste mi sem nemohli dát přesnej kód a napsaný co tam mám jak dát... Díky

P.S. prosim co nejrychleji je to moc důležitý
OndrejVlasák
Profil *
Zkoušel jsem použít skript od Joker - http://skripty.webz.cz/countdown.php?t=1197414000&typ=dhmss Potřebuju přesně to co zde uvedl. Ovšem potřebuji tyto počítadla tři s tím, že v každém bude jiný cílový čas. Když dám tyto tři skripty pod sebe a nastavím tam jiné časy tak se mi navzájem ovlivňují a nefungují. Například čas z třetího scriptu se dostane do prvního scriptu a ostatní scripty ukazují již čas odpočítaný, ve skutečnosti to tak ovšem není.

ukázka: http://www.dozvitese.cz/pocitadlo.html

Za každou radu bu vděčný. děkuji.
Joker
Profil
OndrejVlasák:
Když dám tyto tři skripty pod sebe a nastavím tam jiné časy tak se mi navzájem ovlivňují a nefungují
Protože ten skript má cílový čas a ID prvku které se má měnit uložené v globálních proměnných.

Ten skript by asi chtěl vůbec celý přepsat :-)

Ale taková rychlá oprava a zkrácení by byla asi takhle:
      var hlaska = "Čas už uplynul";

      function odpocet(prvek, cil)
      {
        var el = document.getElementById(prvek);
        if(!el) return;
        var ted = new Date().getTime() / 1000;
        var diff = cil - ted;
        if(diff <= 0)
        {
          el.innerHTML = hlaska;
          return;
        }
        var tmp = diff;
        var d = Math.floor(tmp / 86400);
        tmp = tmp % 86400;
        var h = Math.floor(tmp / 3600);
        tmp = tmp % 3600;
        var m = Math.floor(tmp / 60);
        tmp = tmp % 60;
        var s = Math.floor(tmp);
        var casStr = "";
        if(d > 4) casStr = d + " dní, ";
        else if(d > 1) casStr = d + " dny, ";
        else if(d > 0) casStr = d + " den, ";
        if(h < 10) casStr += "0";
        casStr = casStr + h + ".";
        if(m < 10) casStr += "0";
        casStr = casStr + m + ":";
        if(s < 10) casStr += "0";
        casStr = casStr + "" + s;  
        el.innerHTML = casStr;
        setTimeout("odpocet('"+prvek+"',"+cil+")",995); 
      }
(edit: poznámka, tohle je celý kód, ty ostatní funkce a proměnné z toho starého nejsou už potřeba)
...takhle by to mělo fungovat i pro víc odpočtů. Stačí na stránku nejdřív dát prvek "kontejner" pro odpočet a pak zavolat:
odpocet("id-kontejneru", cílový čas)
_es
Profil
Joker:
Ten tvoj skript je trochu neefektívny a kazíš Chamurappimu osvetovú činnosť.
Upraviť ho nejako takto:
var hlaska = "Čas už uplynul";
function odpocet(prvek, cil){
  var el = document.getElementById(prvek);
  if(!el) return;
  var casovac = setInterval(aktualizace, 1000);
  function aktualizace(){
    var ted = new Date().getTime() / 1000;
    var diff = cil - ted;
    if(diff <= 0){ el.innerHTML = hlaska; clearInterval(casovac); return;}
    var tmp = diff;
    var d = Math.floor(tmp / 86400);
    tmp = tmp % 86400;
    var h = Math.floor(tmp / 3600);
    tmp = tmp % 3600;
    var m = Math.floor(tmp / 60);
    tmp = tmp % 60;
    var s = Math.floor(tmp);
    var casStr = "";
    if(d > 4) casStr = d + " dní, ";
    else if(d > 1) casStr = d + " dny, ";
    else if(d > 0) casStr = d + " den, ";
    if(h < 10) casStr += "0";
    casStr = casStr + h + ".";
    if(m < 10) casStr += "0";
    casStr = casStr + m + ":";
    if(s < 10) casStr += "0";
    casStr = casStr + "" + s;  
    el.innerHTML = casStr;
  }
}
mattyZEM
Profil
Joker: Děkuji mnohokrát za script, je dobrý, jen je pro mě trochu naprd.

- Potřebuji těch odpočtů na stránku více, takže by mě zajímalo, jak by to šlo udělat přes funkci, kde bych dodal tu proměnnou time
- Jak jí volat? V JSku neumím vážně nic :(
- Potřebuji zrušit, nebo něčím nahradit ten div, jelikož jak jsem psal těch časů tam může být více...

Mohl by jsi mi prosím říct, jak na to? Nebo ještě lépe, pokud by jsi byl tak laskav, to předělat? Byl bych ti velmi vděčný.
_es
Profil
mattyZEM:
Trochu upravený kompletný HTML kód:
<!DOCTYPE HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<DIV id=a></DIV>
<DIV id=b></DIV>
<DIV id=c></DIV>
<DIV id=d></DIV>
<DIV id=e></DIV>
<SCRIPT>
var hlaska = "Čas už uplynul";
function odpocet(prvek, cil){
  var el = document.getElementById(prvek);
  if(!el) return;
  var casovac = setInterval(aktualizace, 1000);
  function aktualizace(){
    var ted = new Date().getTime();
    var diff = cil - ted;
    if(diff <= 0){ el.innerHTML = hlaska; clearInterval(casovac); return;}
    var tmp = diff / 1000;
    var d = Math.floor(tmp / 86400);
    tmp = tmp % 86400;
    var h = Math.floor(tmp / 3600);
    tmp = tmp % 3600;
    var m = Math.floor(tmp / 60);
    tmp = tmp % 60;
    var s = Math.floor(tmp);
    var casStr = "";
    if(d > 4) casStr = d + " dní, ";
    else if(d > 1) casStr = d + " dny, ";
    else if(d > 0) casStr = d + " den, ";
    if(h < 10) casStr += "0";
    casStr = casStr + h + ".";
    if(m < 10) casStr += "0";
    casStr = casStr + m + ":";
    if(s < 10) casStr += "0";
    casStr = casStr + "" + s;  
    el.innerHTML = casStr;
  }
}
window.onload = function(){
  odpocet("a", Date.UTC(2010, 4, 1, 12, 0)); // 1.5.2010 12:00 UTC
  odpocet("b", Date.UTC(2010, 5, 2, 14, 0)); // 2.6.2010 14:00 UTC
  odpocet("b", Date.UTC(2010, 5, 3, 14, 0)); // 3.6.2010 14:00 UTC
  odpocet("d", Date.UTC(2020, 8, 1, 9, 15)); // 1.9.2020 09:15 UTC
  odpocet("e", Date.UTC(2009, 0, 1, 0, 0));  // 1.1.2009 00:00 UTC
}
</SCRIPT>
mattyZEM
Profil
Takže ID se nahradit nedá? protože, těch odpočítávání může být klidně i 10, 20 atd...
Joker
Profil
_es:
Ten tvoj skript je trochu neefektívny a kazíš Chamurappimu osvetovú činnosť.
Však píšu, že by chtěl přepsat :-) ...jsem z toho starého skriptu jen vyházel document.all (protože dneska už asi fakt není potřeba) a upravil to, aby to fungovalo pro víc odpočtů.

mattyZEM:
Děkuji mnohokrát za script, je dobrý, jen je pro mě trochu naprd.
- Potřebuji těch odpočtů na stránku více

A kde je problém? Po té úpravě z toho je funkce, které předáte ID prvku kam se má odpočet psát a cílový čas do kterého se odpočítává.

Jak jí volat?
Vždyť jsem to tam napsal!

Potřebuji zrušit, nebo něčím nahradit ten div, jelikož jak jsem psal těch časů tam může být více...
eh? Jaký div?

_es:
Nebude pro získání klasického timestamp potřeba to date.UTC() ještě vydělit 1000?
UTC
(...) returns the number of milliseconds in a Date object since January 1, 1970, 00:00:00, universal time.
_es
Profil
Joker:
Nebude pro získání klasického timestamp potřeba to date.UTC() ještě vydělit 1000?
V JS to je v milisekundách, všetky metódy objektu Date pracujú s takým číslom.
Preto som to delenie 1000 upravil na neskôr, tak aby ten tvoj kód nebolo treba príliš prerábať.
Inak by sa musel ten druhý parameter volania tej funkcie v tom mojom poslednom skripte deliť 1000.

mattyZEM:
Potřebuji těch odpočtů na stránku více
V tom mojom skripte ich máš celkovo 5, snáď je to dosť zrozumiteľné, aby si si to upravil podľa potreby.
Joker
Profil
_es:
Preto som to delenie 1000 upravil na neskôr
Jo ajo, ono je to dělení přidané dovnitř té funkce.
Ten původní skript byl stavěný na to, že se cílový čas plní z PHP, které má "standardní" timestamp (= počet sekund).
OndrejVlasák
Profil *
_es
Díky za upravený skript, pomohl..
mattyZEM
Profil
_es:
Jenže, já to potřebuju na timestamp, ne na datum...

Joker:
eh? Jaký div?
Promiň, blbě jsem se vyjádřil, to ID
Chamurappi
Profil
Reaguji na mattyZEMa:
já to potřebuju na timestamp, ne na datum
Metoda Date.UTC převádí datum na timestamp.
mattyZEM
Profil
Chamurappi:
Metoda Date.UTC převádí datum na timestamp.
To znamená, že smažu funkci a místo toho tam vložím datum v TIMESTAMP?
_es
Profil
Chamurappi:
Metoda Date.UTC převádí datum na timestamp.
Ale asi tu ide o to, že v PHP je ten "timestamp" typ vraj v sekundách a v JavaScripte v milisekundách.
Takže to pri prevodoch medzi tými jazykmi treba vynásobiť alebo vydeliť 1 000.
Maťo
Profil *
tu mas tiež suprový js ktorý nato reaguje a funguje ... nbez problemov


var month = '6'; // 1 through 12 or '*' within the next month, '0' for the current month
var day = '2';   // day of month or + day offset
var dow = 0;     // day of week sun=1 sat=7 or 0 for whatever day it falls on
var hour = 18;    // 0 through 23 for the hour of the day
var tz = 0;     // offset in hours from UTC to your timezone
var lab = 'cd';  // id of the entry on the page where the counter is to be inserted

function start() {displayCountdown(setCountdown(month,day,hour,tz),lab);}
loaded(lab,start);

// Countdown Javascript
// copyright 20th April 2005, 17th November 2006 by Stephen Chapman
// permission to use this Javascript on your web page is granted
// provided that all of the code in this script (including these
// comments) is used without any alteration
// you may change the start function if required
var pageLoaded = 0; window.onload = function() {pageLoaded = 1;}
function loaded(i,f) {if (document.getElementById && document.getElementById(i) != null) f(); else if (!pageLoaded) setTimeout('loaded(\''+i+'\','+f+')',100);
}
function setCountdown(month,day,hour,tz) {var m = month; if (month=='*') m = 0;  var c = setC(m,day,hour,tz); if (month == '*' && c < 0)  c = setC('*',day,hour,tz); return c;} function setC(month,day,hour,tz) {var toDate = new Date();if (day.substr(0,1) == '+') {var day1 = parseInt(day.substr(1));toDate.setDate(toDate.getDate()+day1);} else{toDate.setDate(day);}if (month == '*')toDate.setMonth(toDate.getMonth() + 1);else if (month > 0) { if (month <= toDate.getMonth())toDate.setFullYear(toDate.getFullYear() + 1);toDate.setMonth(month-1);}
if (dow >0) toDate.setDate(toDate.getDate()+(dow-1-toDate.getDay())%7);
toDate.setHours(hour);toDate.setMinutes(0-(tz*60));toDate.setSeconds(0);var fromDate = new Date();fromDate.setMinutes(fromDate.getMinutes() + fromDate.getTimezoneOffset());var diffDate = new Date(0);diffDate.setMilliseconds(toDate - fromDate);return Math.floor(diffDate.valueOf()/1000);}
function displayCountdown(countdn,cd) {if (countdn < 0) document.getElementById(cd).innerHTML = "Spustenie odložené."; else {var secs = countdn % 60; if (secs < 10) secs = '0'+secs;var countdn1 = (countdn - secs) / 60;var mins = countdn1 % 60; if (mins < 10) mins = '0'+mins;countdn1 = (countdn1 - mins) / 60;var hours = countdn1 % 24;var days = (countdn1 - hours) / 24;document.getElementById(cd).innerHTML = days+' dní '+hours+' hodín  '+mins+' minút  '+secs+' sekúnd ';setTimeout('displayCountdown('+(countdn-1)+',\''+cd+'\');',999);}}


a tam kde to chces dat tak to daj ...
<div id="cd"></div>


ja to pouzivam a je bez problemov ... uloz si ho do nejakeho js suboru a ptm daj do medzi <head> cesta ku scriptu
PETRAS
Profil *
RE: mattyZEM: Zasláno: 18.3.2010 22:54:31

-->

Trochu upravený kompletný HTML kód:

<!DOCTYPE HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<DIV id=a></DIV>
<DIV id=b></DIV>
<DIV id=c></DIV>
<DIV id=d></DIV>
<DIV id=e></DIV>
<SCRIPT>
var hlaska = "Čas už uplynul";
function odpocet(prvek, cil){
var el = document.getElementById(prvek);
if(!el) return;
var casovac = setInterval(aktualizace, 1000);
function aktualizace(){.........................................................................................




Super kod kamo,moc to pomohlo mejm strankam, kazdpodne to neni duvod proc pisu.
Zajimalo by mne jestli by nesel nastavit casovy posun GMT+1, jelikoz tam mam ztratu o 1hodinu a pri formatovani casu, ktery je uz tak o hodinu vzadu (duvod jsou hodnoty 0 - 23), tak je to fakt na *****.

Zaroven se ptam jestli tam nejde zmenit i formatovani casu z (2010, 6, 27, 19, 0) na (0000-00-00 00:00:00) ???


diky za odpovedi
_es
Profil
PETRAS:
Výsledkom výrazu Date.UTC(2010, 6, 27, 19, 0) je v JavaScripte číslo, ktoré zodpovedá dátumu UTC definovanému podľa tých piatich parametrov.
Miesto toho výrazu tam môžeš dať iný výraz, alebo číslo, tak, aby výsledkom bolo to číslo, tuším počet milisekúnd od 1.1.1970. V PHP je to 1 000 krát menšie číslo. Ak chceš odrátavať k nejakej udalosti v miestnom čase, použiješ namiesto toho new Date(parametre).getTime()

Zaroven se ptam jestli tam nejde zmenit i formatovani casu
Aký má význam špekulovať nad nejakým formátovaním, ak je viditeľné len v zdrojovom kóde a jeho výsledkom je len obyčajné číslo?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: