ugrás a tartalomhoz

Egyszerű számláló két időpont közt

P-mac · 2011. Aug. 2. (K), 19.36
Sziasztok,

Két dátum közti eltelt időt szeretnék kiírni, de úgy, hogy az eltelt napokat is órában adja meg.

Eddig jutottam:
  1. <script type="text/javascript">  
  2.   function recordTime()  
  3.   {  
  4.     var kezdesido = (new Date(Date.UTC(2011, 7, 20, 12, 0, 0, 0))).getTime();  
  5.     var ido = (new Date()).getTime();  
  6.     var vegeido= new Date(Date.UTC(2011, 8, 21, 24, 0, 0, 0)).getTime();  
  7.     var diftime = ido-kezdesido  
  8.     var eltelt = kezdesido+diftime  
  9.   
  10.     var mMsec = eltelt %1000; eltelt /= 1000;  
  11.     var mSec = eltelt %60; eltelt /= 60;  
  12.     var mMin = eltelt %60; eltelt /= 60;  
  13.     var mHour = eltelt %24; eltelt /= 24;  
  14.   
  15.     var record = Math.floor(mHour) + ":"  
  16.         record += Math.floor(mMin) + ":"  
  17.         record += Math.floor(mSec) + "."  
  18.         record += Math.floor(mMsec)  
  19.   
  20.     document.getElementById('record').innerHTML = record;  
  21.     if (ido>=vegeido)  
  22.     {  
  23.         document.getElementById('win').innerHTML = "<a style='color:red; font-size:14px; font-weight:bold;'>Letelt a kiszabott idő!</a>";  
  24.     }  
  25.     setTimeout("recordTime()",1)  
  26.   }  
  27. </script>  
A két időpont között pont 800 óra van, és szeretném ha kb most vmi ilyesmit jelenítene meg: 273:23:43.012 és folyamatosan nőne.
 
1

Példa, visszaszámlálással

Poetro · 2011. Aug. 2. (K), 22.08
Azt nem tudom, neked hogyan jött ki a 800 óra, mikor az csak 780. Lehet eltévesztetted a hónapot? Ugyanis JavaScript-ben a hónapok 0-tól indulnak.
Példa.
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.   <title>Page Title</title>  
  5. </head>  
  6. <body>  
  7.   <div id="win"></div>  
  8.   <div id="record"></div>  
  9.   <script type="text/javascript">  
  10.   var record = document.getElementById('record'),  
  11.       win = document.getElementById('win'),  
  12.       osztok = [60, 60, 1e3],  
  13.       length = osztok.length - 1,  
  14.       kezdesido = (new Date(Date.UTC(2011, 7, 20, 12, 0, 0, 0))).getTime(),  
  15.       vegeido= (new Date(Date.UTC(2011, 8, 21, 24, 0, 0, 0))).getTime(),  
  16.       diff = vegeido - kezdesido;  
  17.   
  18.   (function recordTime() {  
  19.     var ido = (new Date).getTime(), // Aktuális idő.  
  20.         eltelt = diff - ido + startido, // Megnézzük mennyi idő van még hátra.  
  21.         komponensek = [], // Ide gyűjtjük a komponenseket.  
  22.         szamjegyek, // Számjegyek száma.  
  23.         ertek, // Az aktuális érték.  
  24.         i; // Ciklus változó  
  25.   
  26.     // Fordított sorrendben osztunk (ezred, masodperc, perc).  
  27.     for (i = length; i >= 0; i -1) {  
  28.       ertek = '' + eltelt % osztok[i];  
  29.       // Normalizáljuk az értéket 2 illetve 3 számjegyűre.  
  30.       szamjegyek = i < length ? 2 : 3  
  31.       while (ertek.length < szamjegyek) {  
  32.         ertek = '0' + ertek;  
  33.       }  
  34.   
  35.       if (i === length - 1) {  
  36.         // Ha az utolsó előtti elemnél járunk (másodpercek), ponttal kapcsoljuk  
  37.         komponensek[0] = ertek + '.' + komponensek[0];  
  38.       }  
  39.       else {  
  40.         // Hozzáadjuk a komponensekhez.  
  41.         komponensek.push(ertek);  
  42.       }  
  43.       // Frissítjük az eltelt időt.  
  44.       eltelt = Math.floor(eltelt / osztok[i]);  
  45.     }  
  46.     // Végül hozzáadjuk az órákat.  
  47.     komponensek.push(eltelt);  
  48.   
  49.     // Fordított sorrendben összekapcsoljuk őket.  
  50.     record.innerHTML = komponensek.reverse().join(':');  
  51.     if (ido >= vegeido) {  
  52.       win.innerHTML = "<a style='color:red; font-size:14px; font-weight:bold;'>Letelt a kiszabott idő!</a>";  
  53.     }  
  54.     else {  
  55.       setTimeout(recordTime, 15);  
  56.     }  
  57.   })();  
  58.   </script>  
  59. </body>  
  60. </html>  
2

ez még nem stimmel

P-mac · 2011. Aug. 3. (Sze), 20.45
Neem azért hittem, hogy 800 óra, mert az egyik oldalon ezt írták a két idő különbségére.

Viszont a kód amit írtál, visszafele számol, és minden egyes frissítéskor újraindul.. Mintha nem is játszana az egész során szerepet a jelenlegi idő.

A megoldásnak valami olyannak kéne lennie, hogy felfelé számol, 00:00:00.000-tól 780:00:00.000-ig.

szerk: Illetve most már nem nullától, hanem az eddig eltelt időtől számolna felfelé.
3

augusztus 20.

Poetro · 2011. Aug. 3. (Sze), 20.59
A kezdő dátum augusztus 20, szóval még sok nap van hátra addig, nemhogy a szeptemberi befejezésig, ezért csináltam így. De innen kiindulva már meg tudod csinálni.
4

hmm

P-mac · 2011. Aug. 4. (Cs), 18.31
Logikusan átgondolva a dátumok idejét kéne módosítanom, és talán az i ciklust..

Próbálkoztam sokféleképpen, de nem sikerült megoldani.
5

kezdesido, vegeido, eltelt

Poetro · 2011. Aug. 4. (Cs), 18.51
Csak ezt a három változót kell módosítanod. Semmi mást.
6

megoldottam teljesen másképp :)

P-mac · 2011. Aug. 4. (Cs), 19.48
újragondoltam az egészet és tök egyszerű volt:
  1. <script type="text/javascript">  
  2.     function recordTime()  
  3.     {  
  4.         var kezdesido = (new Date(Date.UTC(2011, 6, 20, 12, 0, 0, 0))).getTime();  
  5.         var ido = (new Date()).getTime();  
  6.         var vegeido= new Date(Date.UTC(2011, 7, 22, 0, 0, 0, 0)).getTime();  
  7.         var fulltime = vegeido-kezdesido;  
  8.         var eltelt = ido-kezdesido;  
  9.   
  10.         var mMsec = eltelt %1000; eltelt /= 1000;  
  11.         var mSec = eltelt %60; eltelt /= 60;  
  12.         var mMin = eltelt %60; eltelt /= 60;  
  13.         var mHour = eltelt %3600; eltelt /= 3600;  
  14.           
  15.         var mMsec = Math.floor(mMsec)  
  16.         var mSec = Math.floor(mSec)  
  17.         var mMin = Math.floor(mMin)  
  18.         var mHour = Math.floor(mHour)  
  19.           
  20.           
  21.         if (mHour<10) mHour="0"+mHour  
  22.         if (mMin<10) mMin="0"+mMin  
  23.         if (mSec<10) mSec="0"+mSec  
  24.         if (mMsec<10) mMsec="00"+mMsec  
  25.         else if (mMsec<100) mMsec="0"+mMsec  
  26.   
  27.         var record = mHour + ":"  
  28.             record += mMin + ":"  
  29.             record += mSec + "."  
  30.             record += mMsec  
  31.   
  32.         document.getElementById('record').innerHTML = record;  
  33.           
  34.         if(fulltime <= eltelt)  
  35.         {  
  36.             document.getElementById('win').innerHTML = "<a style='color:red; font-size:14px; font-weight:bold;'>A számláló a végére ért.</a>";  
  37.         }  
  38.         else  
  39.         {  
  40.             setTimeout("recordTime()",18)  
  41.         }  
  42.     }  
  43. </script>  
  44.   
  45. <body onload="recordTime();">   
  46. <div id="win"></div>   
  47. <div id="record"></div>   
  48. </body>