Autor Zpráva
Dev!l-1415
Profil *
Ahoj všem,

potřebuju na stránky umístit "hodiny", jak dlouho už stránky fungujou... Můj postup byl takový, že jsem si pomocí fce Date uložil do proměnných 2 datumy, ty od sebe odečetl a výsledek zase pomocí funkcí getFullYear, getMonth, getDate atd. vytáhl zpátky. Problém je, že mi to nezobrazuje korektně. Pokud použiju PHP funkci diff, tak ta mi to zobrazí správně.

<script type="text/javascript">
var time_offset = 1000 * <?php echo time(); ?> - (new Date()).getTime();
window.setInterval(function () {
var local_time = new Date();
local_time.setTime(local_time.getTime() + time_offset);
var start_time = new Date("September 25, 1991 11:00:00");
var diff = new Date(local_time.getTime() - start_time.getTime());
var years,months,days,hours,minutes,seconds,text;

years = diff.getFullYear() - 1970;
months = diff.getMonth();
days = diff.getDate();
hours = diff.getHours();
minutes = diff.getMinutes();
seconds = diff.getSeconds();

text = years + ' let ';
text += months + (months==1 ? ' mesic ': (months>1 && months<5 ? ' mesice ' : ' mesicu; '));
text += days + (days==1 ? ' den ': (days>1 && days<5 ? ' dny ' : ' dni '));
text += hours + ':' + minutes + ':' + seconds;

document.getElementById('local-time').innerHTML = text;
}, 1000);
</script>

Dnes mi to ukazuje: 21 let (správně), 2 měsíce (špatně), 2 dny (špatně)... Správně by mělo být: 21 let, 1 měsíc, 30 dni

Nevíte někdo, kde by mohla být chyba?? Předem děkuji za každou reakci
Kajman_
Profil *
Takhle to nebude fungovat. Zjistěte si rok, měsíc a den ze start_time i z local_time a to porovnávejte.
Dev!l-1415
Profil *
Kajman:
si rok, měsíc a den ze sta

Děkuji za reakci... Myslíte to takhle?

years = local_time.getFullYear() - start_time.getFullYear();
months = local_time.getMonth() - start_time.getMonth();
days = local_time.getDate() - start_time.getDate();


Nebo jinak? Tímto způsobem to také nefunguje.. :(
Kajman_
Profil *
Pokud je days záporné, musíte odečíst z months jedničku a vypočítat dny správně. Poté také zkontrolovat months a pokud jsou záponé, odečíst jeden rok.
Dev!l-1415
Profil *
Děkuji, funguje :))
Dev!l-1415
Profil *
Nebudu zakládat nový thread, zeptám se tu, snad mi někdo odpoví... :)
Skript používám již delší dobu, akorát jsem si udělal funkci... Vypadá to nějak takto:

function count_time(time_offset, start_time, element) {
    var local_time = new Date();
    local_time.setTime(local_time.getTime() + time_offset);
    var diff = new Date(local_time.getTime() - start_time.getTime());
    
    years = local_time.getFullYear() - start_time.getFullYear();
    months = local_time.getMonth() - start_time.getMonth();
    days = local_time.getDate() - start_time.getDate();
    hours = diff.getHours();
    minutes = diff.getMinutes();
    seconds = diff.getSeconds();
    
    if (days < 0) {
      months = months - 1;
      days = local_time.daysInMonth() + days;
    } 
    
    if (months < 0) {
      years = years - 1;
      months = 12 + months;
    }
    
    text =  years + (years==1 ? ' rok ': (years>1 && years<5 ? ' roky ' : ' let '));
    text += months + (months==1 ? ' měsíc ': (months>1 && months<5 ? ' měsíce ' : ' měsíců '));
    text += days + (days==1 ? ' den ': (days>1 && days<5 ? ' dny ' : ' dní '));
    text += hours + ':';
    text += (minutes<10 ? ('0' + minutes) : minutes);
    text += ':' + (seconds<10 ? ('0' + seconds) : seconds);
    
    document.getElementById(element).innerHTML = text;
}

Tuto funkci pak volám takto:

var time_offset = 1000 * <?php echo time(); ?> - (new Date()).getTime();
var start_time = new Date("September 25, 1990 11:00:00");
var years,months,days,hours,minutes,seconds,text;

Date.prototype.daysInMonth = function () {
   return new Date(this.getFullYear(), this.getMonth(), 0).getDate()
}

window.setInterval(function () {
    count_time(time_offset, start_time, 'local-time');
}, 1000);

Ale nechápu jednu věc...
Pokud je proměnná start_time = March 30, 1999 11:00:00, pak je rozdíl 12 let 10 měsíců 5 dní 2:15:31
Pokud je proměnná start_time = August 08, 2003 11:00:00, pak je rozdíl 8 let 5 měsíců 27 dní 3:15:31

Roky, měsíce, dny, minuty i sekundy sedí, ale proboha proč je tam rozdíl jedné hodiny, když start_time je u obou případů 11:00??
Jakékoliv rady vítám, děkuji
MiroXX
Profil *
Či tam nie je zapracovaný letný a zimný čas ?

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:

Prosím používejte diakritiku a interpunkci.

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