Autor Zpráva
Beduin
Profil *
Potřeboval bych poradit. Mám proměnné (den1, mesic1, rok1, den2, mesic2, rok2), které načítám z formuláře a potřebuju zjisitit rozdíl ve dnech, ale nevím jak na to.

Takže třeba data 2.5.2007 a 26.4.2007 - rozdíl je 6 dní. Ale nevím, jak toho docílit. Prosím, poraďte.
zivan
Profil
Bez kontrol.

function rozdilVeDnech(prvni, druhe)

{
return Math.abs((druhe.getTime() - prvni.getTime()) / (1000*60*60*24));
}

var prvni = new Date(2007,4,2);
var druhe = new Date(2007,3,26);
var rozdil = rozdilVeDnech(prvni, druhe);
document.write("Rozdil ve dnech je: " + rozdil);
Beduin
Profil *
Díky, ono to fakt funguje...
Johnie
Profil *
Je tam jeden problém, nepočítá to s přestupnými roky, zcela je to ignoruje.
Věděl by někdo, co s tím?
YoSarin
Profil
Johnie
Jsi si jistý že to ty přestupné roky ignoruje? Já bych řekl že getTime si s tím poradí...
Johnie
Profil *
Bohužel, je to pravda ... Zkoušel jsem zjistit rozdíl v několika vzdálených datech.
Například

1.1.1911
2.2.1922

getTime zjistí, že rozdíl ve dnech činí 4047 dní.

Jenže, je to k nevíře, ale je to ve skutečnosti 4050 dní.

Od 1.1.1911 zbývá do konce roku 364 dní.
roky mezi léty 1911 a 1922, tyto dva nepočítaje, činí 10 let, tedy za normálních okolností 3650 dní ...
jenže jsou v nich přece jen tři přestupné roky a sice 1912, 1916 a 1920, takže to máme 3 dny navíc ...
v roce 1922 zbývá do doby 2.2.1922 přesně 33 dní.

Sečteme-li

364
3650
3
33
-------
4050 dní, tohle je skutečný počet dní a ty tři dny tam budou lítat ....

Možná by to šlo nějak jednoduše ošetřit ...
Přestupné roky jsou dělitelné čtyřmi beze zbytku.
YoSarin
Profil
Tomu se těžko věří... z definice:
The getTime() method returns the number of milliseconds since midnight of January 1, 1970.
a pokud zadáš 2.2.1922 tak jen těžko můžu říct co z toho vylezlo... :)
Zkus to na nějaká novější data.
Jinak, provedu důkaz:
pokud D1, D2 jsou data a T1, T2 jsou timestampy těchto dat (tedy počet milisekund od dané půlnoci do daného data), pak rozdíl mezi T1 a T2 je počet milisekund, které uplynuly mezi D1 a D2. Tudíž tam musí to ošetření být, jináč by to byla fce na prd.
Ale možná je to jen špatně implementované (ta funkce getTime()). :)
Johnie
Profil *
No, s tím, že by to mělo brát data po 1.1.1970 je to zajímavé.
Ale ani tato data to správně nepočítá.
Zkusil jsem tato dvě data:

1.1.1970
2.2.1998

getTime říká, že rozdíl ve dnech činí 10256 dní.
Skutečnost je ale přesně 10259 dní, myslím, že se nepletu,
posuďte sami ...

Od 1.1.1970 zbývá do konce roku 364 dní.
roky mezi léty 1970 a 1998, nepočítaje tyto dva roky, činí 27 let,
takže 27*365 = 9855
Přestupných roků bylo 7 a sice roky 1970, 1974, 1978, 1982, 1986
1990 a 1994. Přestupný byl i rok 1998, ale ten nepočítám, protože
koncové datum je 2.2. a tedy nebude přestupným rokem ovlivněno.

v roce 1998 zbývá do doby 2.2.1998 přesně 33 dní.

Sečteme-li

364
9855
7
33
-------
10259 dní, nevím proč, ale zase je rozdíl 3 dny.

Nevím, k čemu getTime je, když dělá takový chaos. Pokud by to někdo dovedl
nějak obejít nebo zmáknout v javascriptu, byť méně elegantně, dejte vědět.
Mastodont
Profil
V Excelu je rozdíl těchto dat taky 10 259 dnů.
zivan
Profil
V cem a jak pocitas rozdil pres gettime? Zkousel jsem ten posledni rozdil dat a ta fce rozdilVeDnech() mi spocitala spravne 10259 dni.

A rozdil mezi daty 1.1.1911 a 2.2.1922 je taky spravne - 4050 dni.
Mastodont
Profil
<script>function rozdilVeDnech(prvni, druhe)

{
return Math.abs((druhe.getTime() - prvni.getTime()) / (1000*60*60*24));
}

var prvni = new Date(1998,2,2);

var druhe = new Date(1970,1,1);

var rozdil = rozdilVeDnech(prvni, druhe);

document.write("Rozdil ve dnech je: " + rozdil);</script>


Vrací 10 256. Mám to tu v prohlížeči.
zivan
Profil
No jo, ale ty porovnavas jine datumy :-) Cislovani mesicu zacina od nuly.

Zkus to jeste jednou a u obou mesicu ve scriptu odecti jednicku.
Mastodont
Profil
Selfpwned. Stane se.
Johnie
Profil *
No chlapi, je to zajímavé. Vypadá to, že by to mohlo být v tom číslování měsíců...
Já jsem ale v javascriptu laik, mohli byste mi napsat sem dát scriptík,
kde by už bylo začleněno odečítání té jedničky od obou měsíců? Že by se to celé jen
zkopírovalo, hodilo na web a fungovalo? Dost by mi to pomohlo. Díky.
Johnie
Profil *
Chlapi, už mi to běží, bylo to fakt v tom číslování měsíců,
díky zivane a vsem!
Toto téma je uzamčeno. Odpověď nelze zaslat.