[js + php] problem z odliczaniem

0

elo. mam taki skrypt:

<html>
<script type="text/javascript">
function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), x=~~(t=(t-x)*60),~~((t-x)*60)]}
function R(t){
t=CD(new Date(2008,07,18,16,00,00),new Date());
document.getElementById('costam').innerHTML=''+t[1]+":"+t[2]+":"+t[3]+"";
if(!t[0]&&!t[1]&&!t[2]&&!t[3])document.getElementById('costam').innerHTML='Koniec odliczania';
else setTimeout('R()',1e3);
}

onload=function(){R();}

</script>
<div id="costam"></div> 
</html>

ten skrypt jest ok i wszystko śmiga. Jednak chce aby odliczało ile pozostało sekund do daty w zmiennej. Zmienna pobiera date z mysql (DATETIME) czyli w takiej wartości 0000-00-00 0000

a skrypt operuje na takiej 0000,00,00,00,00,00

Jak moge przekształcić skrypt aby odliczało prawidłowo ?

0

Napisałem taką funkcję. Wstaw ją do skryptu...

function str2date(s) {
  var t = new Array(), d;
  s.replace(/[0-9]+/g, function(a) { t[t.length] = a; } );
  eval('d = new Date(' + t.join(',') + ');');
  return d;
}

...a w miejscu w którym masz: new Date(2008,07,18,16,00,00)
wpisz coś takiego: str2date('2008-07-18 16:00:00')

0

zrobilem tak jak mi podał piechnat, kod wyglada tak:

<html>
<script type="text/javascript">


function str2date(s) {
  var t = new Array(), d;
  s.replace(/[0-9]+/g, function(a) { t[t.length] = a; } );
  eval('d = new Date(' + t.join(',') + ');');
  return d;
}



function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), 

x=~~(t=(t-x)*60),~~((t-x)*60)]}
function R(t){
t=CD(str2date('2008-07-18 16:00:00'),new Date());
document.getElementById('costam').innerHTML=''+t[1]+":"+t[2]+":"+t[3]+"";
if(!t[0]&&!t[1]&&!t[2]&&!t[3])document.getElementById('costam').innerHTML='Koniec 

odliczania';
else setTimeout('R()',1e3);
}

onload=function(){R();}

</script>
<div id="costam"></div>
</html>

tylko zamiast odliczania pojawia mi sie napis "koniec odliczania"

wiecie moze jak zmienic kod aby dobrze śmigało ???

0

łatwiej i profesjonalniej dostosować datę w php niż w js

date('Y,m,d,H,i,s', strtotime($data_z_bazy));

0

btw, skrypt mógłby być lepszy ale zainteresowało mnie podawanie liczb w postaci wykładniczej (864e5 / 1e3). fajnie wygląda i nadal jest czytelne, że też na to nie wpadłem ;P

0

jak to (date('Y,m,d,H,i,s', strtotime($data_z_bazy));) przypisac do zmiennej ?? i jak sie tym posługuwać ??

0

t=CD(new Date(2008,07,18,16,00,00),new Date());

na:

t=CD(new Date(<?php echo date('Y,m,d,H,i,s', strtotime($data_z_bazy)) ?>),new Date());

0

dzieki :) tylko jeszcze jedna rzecz :) kod wyglada tak:

 <? $data_z_bazy = $praca; ?>

<script>
function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), x=~~(t=(t-x)*60),~~((t-x)*60)]}
function R(t){
t=CD(new Date(<?php echo date('Y,m,d,H,i,s', strtotime($data_z_bazy)) ?>),new Date());
document.getElementById('costam').innerHTML=''+t[1]+":"+t[2]+":"+t[3]+"";
if(!t[0]&&!t[1]&&!t[2]&&!t[3])document.getElementById('costam').innerHTML='Koniec odliczania';
else setTimeout('R()',1e3);
}

onload=function(){R();}

</script>
<div id="costam"></div>

odlicza sie dobrze, tylko że jak licznik dochodzi do 0, to idzie od nowa czyli 2359...jak zrobić tak, że jak dojdzie do zera to strona się odświeża ??

0

hmmm debugowałem to i problem w tym że dni się nie zgadzają, datę 2008-01-31 odczytuje jako 2 marzec (dziwne strasznie), nie wgłębiałem sie w to ale to chyba oznacza złą kolejność parametrów podanych do new Date
jeśli odliczasz czasy zawsze mniejsze od dnia to możesz pominąć sprawdzanie pierwszego parametru czyli tylko usunąć !t[0]&& ale to nie jest lekarstwo na chorobę tylko plasterek

1 użytkowników online, w tym zalogowanych: 0, gości: 1