Autor Zpráva
undisputed
Profil
Ahojte,
Nemáte niekto skript na odpočet na určitú hodinu resp.dátum?hľadám po googli a stále nič normálne neviem nájsť
radas
Profil *
určitě když to tu dam, tak někdo napiše že je to eunuch..
<style type="text/css">
ins{text-decoration:none;}
</style>
<p>Do prvního data zbývá <ins id="jedna" datetime="5 17 2011 20:00:00 GMT"></ins></p>


<script type="text/javascript">
<!-- 
//predelavka http://www.geocities.com/SiliconValley/Lakes/8620/countdown.html
function toSt(n){
var s='';
if(n<10){s+='0';}
return s+n.toString();
}
function odpocet(kde){
var co=document.getElementById(kde).getAttribute('datetime');
var kdy=new Date(co);
var ted=new Date();
var jedu=Math.floor((kdy.getTime()-ted.getTime())/1000);
var den,hodin,minut,sekund;
if(jedu<=0){
document.getElementById(kde).innerHTML='je to tu';
return;
}
var sec=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var min=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var hod=toSt(jedu%24);
jedu=Math.floor(jedu/24);
var dnu=jedu;
if(sec==1){sekund=' sekunda';}
else if(sec==2||sec==3||sec==4){sekund=' sekundy';}
else{sekund=' sekund';}
if(min==1){minut=' minuta';}
else if(min==2||min==3||min==4){minut=' minuty';}
else{minut=' minut';}
if(hod==1){hodin=' hodina';}
else if(hod==2||hod==3||hod==4){hodin=' hodiny';}
else{hodin=' hodin';}
if(dnu==1){den=' den';}
else if(dnu==2||dnu==3||dnu==4){den=' dny';}
else{den=' dnů';}
   if(dnu==0){
 var tmp=' '+hod+hodin+', '+min+minut+', '+sec+ sekund; 
   }
   else 
var tmp=' '+dnu+den+', '+hod+hodin+', '+min+minut+', '+sec+ sekund;
document.getElementById(kde).innerHTML=tmp;
setTimeout("odpocet('"+kde+"')", 500);   
}
function init(){
odpocet('jedna');
}
window.onload=init;
// -->
</script>
okolojdouci
Profil *
radas:
určitě když to tu dam, tak někdo napiše že je to eunuch

Nemyslím :-) Spíš bych řekl, že jestli nevysvětlíš, cos tím myslel, nikdo to nepochopí.
undisputed
Profil
Aj tak mi to nejak nefunguje,ukáže mi len "do prvého data zbyva"
undisputed
Profil
*edit už mi to funguje

ale chcel by som sa spýtať či sa k času dá pripočítať nejaký ďalší čas ide to?napr. mám toto teda

<style type="text/css">
ins{text-decoration:none;}
</style>
<?php
$today = date("n j Y H:i:s");

echo "<p>Do konca času ostáva <ins id='jedna' datetime='$today'></ins></p>";
?>


<script type="text/javascript">
<!-- 
//predelavka http://www.geocities.com/SiliconValley/Lakes/8620/countdown.html
function toSt(n){
var s='';
if(n<10){s+='0';}
return s+n.toString();
}
function odpocet(kde){
var co=document.getElementById(kde).getAttribute('datetime');
var kdy=new Date(co);
var ted=new Date();
var jedu=Math.floor((kdy.getTime()-ted.getTime())/1000);
var den,hodin,minut,sekund;
if(jedu<=0){
document.getElementById(kde).innerHTML='je to tu';
return;
}
var sec=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var min=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var hod=toSt(jedu%24);
jedu=Math.floor(jedu/24);
var dnu=jedu;
if(sec==1){sekund=' sekunda';}
else if(sec==2||sec==3||sec==4){sekund=' sekundy';}
else{sekund=' sekúnd';}
if(min==1){minut=' minuta';}
else if(min==2||min==3||min==4){minut=' minúty';}
else{minut=' minút';}
if(hod==1){hodin=' hodina';}
else if(hod==2||hod==3||hod==4){hodin=' hodiny';}
else{hodin=' hodín';}
if(dnu==1){den=' den';}
else if(dnu==2||dnu==3||dnu==4){den=' dni';}
else{den=' dní';}
   if(dnu==0){
 var tmp=' '+hod+hodin+', '+min+minut+', '+sec+ sekund; 
   }
   else 
var tmp=' '+dnu+den+', '+hod+hodin+', '+min+minut+', '+sec+ sekund;
document.getElementById(kde).innerHTML=tmp;
setTimeout("odpocet('"+kde+"')", 500);   
}
function init(){
odpocet('jedna');
}
window.onload=init;
// -->
</script>


No a aby začalo odpočítavať premennú today + niečo napr. z DB vybraté išlo by to?
Witiko
Profil
undisputed:
Jak koukám na kód, tak by mělo stačit vytvořit si libovolný jiný element, do atributu datetime mu vložit ten druhý čas a ve funkci init zavolat odpocet(id elementu). V kódu dole ukazuji jak.

Trochu jsem to přepsal a navrhuji následující podobu, ve které jsem odstranil mírně nesmyslný setTimeout každých 500ms, stále opětovné získávání známých pointerů a Date objektů, dvojité deklarace proměnných, nepotřebné deklarace proměnných, ignoraci existence metody Date.now a terárních operátorů:
<script type="text/javascript">

  function toSt(n){
    return (n<10 ? "0" : "") + n;
  };

  function odpocet(kde, kdy){
    var ted = Date.now ? Date.now() : (new Date).getTime(),
        jedu = Math.floor((kdy.getTime() - ted) / 1000),
        den, hodin, minut, sekund, sec, min, hod, dnu;

    if(jedu <= 0) return !(kde.innerHTML = "je to tu");
    
    sec = jedu % 60 >>> 0;
    jedu /= 60;
    min = jedu % 60 >>> 0;
    jedu /= 60;
    hod = jedu % 24 >>> 0;
    jedu /= 24;
    dnu = jedu >>> 0;

    if(sec === 1) sekund = " sekunda"; 
    else if(sec > 1 && sec <= 4) sekund = " sekundy";
    else sekund = " sekúnd";

    if(min === 1) minut= " minuta";
    else if(min > 1 && min <= 4) minut = " minúty";
    else minut = " minút";

    if(hod === 1) hodin = " hodina";
    else if(hod > 1 && hod <= 4) hodin = " hodiny";
    else hodin = " hodín";

    if(dnu === 1) den = " den";
    else if(dnu > 1 && dnu <= 4) den = " dni";
    else den = " dní";

    sec = toSt(sec);
    min = toSt(min);
    hod = toSt(hod);

    kde.innerHTML = (dnu ? " " + dnu + den + ", " : "") + hod + hodin + ", " + min + minut + ", " + sec + sekund;
  };

  window.onload = function() {
    var jedna = [document.getElementById("jedna"),,],
        dva = [document.getElementById("dva"),,],
        obnov = function() {
          odpocet.apply(this, jedna);
          odpocet.apply(this, dva);
        };

    jedna[1] = new Date(jedna[0].getAttribute("datetime"));
    dva[1] = new Date(dva[0].getAttribute("datetime"));
    
    obnov();
    setInterval(obnov, 1000);
  };

</script>

<ins id="jedna" datetime="October 13, 2012 11:13:34"></ins><br>
<ins id="dva" datetime="December 25, 2011 16:52:12"></ins>
undisputed
Profil
No moc tomu nerozumiem,js nepoznám prakticky vôbec.,ale myslím že by stačilo len do premennej uložiť ten výsledný čas a ten spušťať ale ako sa to dá pripočítať k tomu?a btw skript mi tento nejde
Witiko
Profil
undisputed:
Skript jsem odzkoušel a samozřejmě funguje, koneckonců jde jen o mírný přepis toho tvého pro vyšší efektivitu. Jen musíš php scriptem generovat datum ve správném formátu. Ve stejném v jakém ho generuješ ve svém příkladu.
Witiko
Profil
EDIT: Původně jsem v tom scriptu použil tag span, u něhož se Internet Exploreru nezamlouvala nesmyslná definice atributu datetime. Nyní už by měl příklad fungovat.
undisputed
Profil
Neviem prečo mi to zase nejde ale to nevadí,ten úplne prvý mi ide.ale stale som nedostal odpoveď ako mám pripočítať k aktuálnemu času napr 10minút
Witiko
Profil
undisputed:
Odpověděl jsem ti na to už několikrát. Navrať si php scriptem nový ins tag s časem o 10 minut víc a pak stačí zavolat funkci odpocet s novým id.
undisputed
Profil
Áno tomu chápem ale ako mám spraviť aby tam bolo o 10 minút viac neviem,chápete?mám aktuálny čas v premennej a k tomu nejak pripočítať tie minúty
Witiko
Profil
undisputed:
Asi má jít o otázku ohledně php. Odkážu na manuál k funkci date, jako druhý argument stačí dodat pozměněný timestamp. Mám pocit, že ho php počítá v sekundách, takže by mělo stačit přičíst 600.
$today    = date("n j Y H:i:s", time());
$tomorrow = date("n j Y H:i:s", time() + 86400);
$toyota   = date("n j Y H:i:s", time() + 86400 * 2);
undisputed
Profil
no funguje to,môžem pripočítať koľko chcem, len problém je že keď obnovím stránku tak odpočet ide zase od začiatku nie odtiaľ kde skončil, nedá sa to nejak spraviť?
Witiko
Profil
undisputed:
Co chceš na tom spravovat, to je snad logické a očekávané chování, ne? Při znovunačtení stránky php skript vygeneruje nový čas na základě aktuálního času tak, jak jej navrací funkce time() či date buz přídavných argumentů. Pakliže chceš odpočítávat k nějakému napevno danému datu, tak ho tomu scriptu budeš muset nastavit.

Moderace: Navrhuju přesun do sekce PHP. :-)
undisputed
Profil
Presunúť sa to môže :-)

k téme, no hej je to ligické, ale nedá sa to nejak aby to nešlo stále odznova?

možno to číslo odpočítavané uložiť do DB a každú sekundu ho do db update-ovať o 1 menej,

ale to by išlo asi len cez cron :(
Witiko
Profil
undisputed:
A méně efektivní způsob už tě nenapadl?

Co třeba si aktuální čas + X minut uložit do $_SESSION pro daného návštěvníka a při další návštěvě stránky datum vytáhnout z ní?
session_start();
if(!isSet($_SESSION["cas"])
  $_SESSION["cas"] = time() + XYZ;
$cas = $_SESSION["cas"];
undisputed
Profil
No ale to mi žiaden problém nerieši :) takto tiež keď obnovím stránku sa to začne odznova a odznova
Witiko
Profil
Jistěže to problém řeší, generuj date() za pomocí timestampu ze session.
undisputed
Profil
Radšej to necháme tak..našiel som na googli odpočet aký som chcel takže už mi to netreba.
undisputed
Profil
No predsa len som si tu uložil do session :)

<style type="text/css">
ins{text-decoration:none;}
</style>
<?php
session_start();

$today = date("n j Y H:i:s");
echo $today;

$toyota  = date("n j Y H:i:s", time() + 8000);
if(!isset($_SESSION['cas']))
{
$_SESSION['cas']=$toyota;
}
else {
echo "už existuje";
}
$sess=$_SESSION['cas'];
echo "<p>ostáva <ins id='jedna' datetime='$sess'</ins></p>";


echo $_SESSION['cas'];
?>
<script type="text/javascript">
<!-- 
//predelavka http://www.geocities.com/SiliconValley/Lakes/8620/countdown.html
function toSt(n){
var s='';
if(n<10){s+='0';}
return s+n.toString();
}
function odpocet(kde){
var co=document.getElementById(kde).getAttribute('datetime');
var kdy=new Date(co);
var ted=new Date();
var jedu=Math.floor((kdy.getTime()-ted.getTime())/1000);
var den,hodin,minut,sekund;
if(jedu<=0){
document.getElementById(kde).innerHTML='je to tu';
return;
}
var sec=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var min=toSt(jedu%60);
jedu=Math.floor(jedu/60);
var hod=toSt(jedu%24);
jedu=Math.floor(jedu/24);
var dnu=jedu;
if(sec==1){sekund=' sekunda';}
else if(sec==2||sec==3||sec==4){sekund=' sekundy';}
else{sekund=' sekúnd';}
if(min==1){minut=' minuta';}
else if(min==2||min==3||min==4){minut=' minúty';}
else{minut=' minút';}
if(hod==1){hodin=' hodina';}
else if(hod==2||hod==3||hod==4){hodin=' hodiny';}
else{hodin=' hodín';}
if(dnu==1){den=' den';}
else if(dnu==2||dnu==3||dnu==4){den=' dni';}
else{den=' dní';}
   if(dnu==0){
 var tmp=' '+hod+hodin+', '+min+minut+', '+sec+ sekund; 
   }
   else 
var tmp=' '+dnu+den+', '+hod+hodin+', '+min+minut+', '+sec+ sekund;
document.getElementById(kde).innerHTML=tmp;
setTimeout("odpocet('"+kde+"')", 1000);   
}
function init(){
odpocet('jedna');
}
window.onload=init;
// -->
</script>


Ale dalo by sa tam niekde vopchať že ak sa čas odpočíta na 0 tak aby update-ol mysql?
undisputed
Profil
popr. aj kde dať aby po skončení sa zrušila session

diky moc

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:

0