| Autor | Zpráva | ||
|---|---|---|---|
| undisputed Profil |
#1 · Zasláno: 21. 5. 2011, 08:09:24
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 * |
#2 · Zasláno: 21. 5. 2011, 08:18:54
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 * |
#3 · Zasláno: 21. 5. 2011, 08:36:27
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 |
#4 · Zasláno: 21. 5. 2011, 08:53:07
Aj tak mi to nejak nefunguje,ukáže mi len "do prvého data zbyva"
|
||
| undisputed Profil |
#5 · Zasláno: 21. 5. 2011, 12:06:10
*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 |
#6 · Zasláno: 21. 5. 2011, 17:08:06 · Upravil/a: Witiko
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 |
#7 · Zasláno: 21. 5. 2011, 18:30:10
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 |
#8 · Zasláno: 21. 5. 2011, 18:39:39 · Upravil/a: Witiko
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 |
#9 · Zasláno: 21. 5. 2011, 18:55:18 · Upravil/a: Witiko
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 |
#10 · Zasláno: 21. 5. 2011, 21:06:28
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 |
#11 · Zasláno: 21. 5. 2011, 21:40:19
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 |
#12 · Zasláno: 22. 5. 2011, 08:00:17
Á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 |
#13 · Zasláno: 22. 5. 2011, 10:48:22 · Upravil/a: Witiko
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 |
#14 · Zasláno: 22. 5. 2011, 13:05:37
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 |
#15 · Zasláno: 22. 5. 2011, 13:10:08 · Upravil/a: Witiko
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 |
#16 · Zasláno: 22. 5. 2011, 13:28:47
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 |
#17 · Zasláno: 22. 5. 2011, 13:59:05 · Upravil/a: Witiko
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 |
#18 · Zasláno: 22. 5. 2011, 14:44:36
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 |
#19 · Zasláno: 22. 5. 2011, 15:40:38 · Upravil/a: Witiko
Jistěže to problém řeší, generuj date() za pomocí timestampu ze session.
|
||
| undisputed Profil |
#20 · Zasláno: 22. 5. 2011, 16:16:51
Radšej to necháme tak..našiel som na googli odpočet aký som chcel takže už mi to netreba.
|
||
| undisputed Profil |
#21 · Zasláno: 24. 5. 2011, 12:57:03
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 |
#22 · Zasláno: 24. 5. 2011, 13:05:43
popr. aj kde dať aby po skončení sa zrušila session
diky moc |
||
|
Časová prodleva: 15 let
|
|||
0