Autor Zpráva
Misty
Profil
Znáte někdo návod nebo skript kde by se zadaly dvě data a po stisknutí tlačítka by se spočítal počet dní mezi těmito daty?
Joker
Profil
Počet dní mezi dvěma daty:
Math.abs(prvniDatum.getTime() - druheDatum.getTime() / (24*60*60*1000))
Chamurappi
Profil
Reaguji na Jokera:
Pozor na přednost operátorů.
_es
Profil
Misty, Joker
Záleži aj na tom, čo sa pod počtom dní myslí:
Od 16.7.2009 09:00 do 16.7.2009 14:00 je rozdiel 0 dní alebo 1 deň?
Od 16.7.2009 22:00 do 17.7.2009 03:00 je rozdiel 0 dní alebo 1 deň?
Joker
Profil
Chamurappi:
Ajo, Javascript. Tak:
Math.abs((prvniDatum.getTime() - druheDatum.getTime()) / (24*60*60*1000))


_es:
Většinu těch problémů vyřeší vhodné zaokrouhlení toho čísla.
Ale dobrá poznámka, že pokud hodiny nejsou zajímavé, mělo by se datum zkonstruovat s nějakým jednotným časem, obvykle 00:00
_es
Profil
Většinu těch problémů vyřeší vhodné zaokrouhlení toho čísla.
Nejde o nejaký problém, ale o definíciu „počtu dní medzi dátumami“.
V tých dvoch príkladoch je rovnaký rozdiel 5 hodín, no niekto môže použiť takú definíciu, že bude v každom počet dní medzi dátumami iný.
Chamurappi
Profil
Reaguji na _es:
Nevidím v tom problém, den má 24 hodin, v obou uvedených případech je rozdíl menší než den, takže 0 dní.
Misty psal v zadání o zadávání datumů, ne o obecných časových údajích.
_es
Profil
Chamurappi
Ide o to, či tie dva dátumy sú len dátumy, teda bez hodín, minút, ...
Vtedy naozaj nevzniká žiadny problém.
Ak sú tie dátumy aj s presným časom, tak tam môže nastať problém.
Ak sú napríklad v nejakom meste celodenné lístky na niečo - napr. MHD od polnoci do polnoci, tak v prvom prípade stačí jeden lístok a v druhom musia byť lístky dva.
Aj vo veľa iných prípadoch záleží nie len na presnom časovom rozdiele, ale aj na tom, koľko krát sa zmenil dátum, alebo niečo iné - napr. v hoteloch a pod.
Misty
Profil
Mnohokráte všem děkuji za komentáře s odpověďmi.

Doplním zadaní s těma dny: Jedná se o počet dnů kalendářně, takže když bude 17.7.2009 23:55:00 a druhé datum 18.7.2009 00:02:30, tak už bude započítaný jeden den.
_es
Profil
function pocetdni(d1, d2){
  var p = 24*60*60*1000, z1 = d1.getTimezoneOffset() * 60000, z2 = d2.getTimezoneOffset() * 60000;
  d1 = d1.getTime(); d2 = d2.getTime();
  d1 -= z1; d2 -= z2; // časové pásmo
  return Math.abs((d1 - d1 % p - d2 + d2 % p) / p);
}
Ten 4. riadok zohľadňuje miestnu polnoc, prípadne sa môže upraviť podľa inej významnej udalosti dňa, alebo iného časového pásma. Bol opravený po pripomienke ah01 nižšie.
ninja
Profil
Opět bych připomenul: Ne každý den má 24 hodin!
Chamurappi
Profil
Reaguji na ninju:
Jistě, na Deep Space 9 má 26 hodin.
Ale na Zemi má den vždy 24 hodin (± jedna sekunda), ne?


Reaguji na ↓ ah01:
Už chápu, děkuji za připomenutí.
Ale jinak je fyzikální jednotka „den“ definována jako 86400 sekund.
ah01
Profil
Chamurappi
Světe s 24 hodinovými dny div se, ale třeba neděle 25. října 2009 má 25 hodiny.

(new Date(2009,9,26) - new Date(2009, 9, 25)) / (60*60*1000) // -> 25

1. nápověda - je to poslední neděle v říjnu
2. nápověda - děje se to každou poslední neděli v říjnu

Tímto dnem končí letní čas, tzn. tento den je o hodinu delší. Stejně tak poslední neděle v březnu, kdy se přechází na letní čas, má 23 hodin (letos 29. 3.).

(new Date(2009,2,30) - new Date(2009, 2, 29)) / (60*60*1000) // -> 23


Misty
řešení od _es toto v potaz nebere a v těchto dnech může dojít k chybnému výpočtu

function pocetZapocatychDni(d1, d2)
{
  var ONE_DAY = 24*60*60*1000;
  var offset = (d2.getTimezoneOffset() - d1.getTimezoneOffset()) * 60000;
  return Math.ceil((d2 - d1 - offset) / ONE_DAY); 
}
_es
Profil
ah01
Opravil som funkciu podľa tvojej pripomienky.
No tá tvoja funkcia robí niečo úplne iné ako moja.
Moja je viazaná na miestnu polnoc, udáva, aký výpočet by vyšiel, keby sa dátumy najprv nastavili na miestnu polnoc toho istého dátumu a potom sa z nich vyrátal rozdiel v dňoch.
Tá tvoja funkcia len deformuje presný výpočet rozdielu UTC časov a pri zadávaní časov blízko miestnej polnoci nebude dávať správne výsledky.
Misty
Profil
Díky ... moc mě vaše odpovědi s návrhy pomohly. Užívejte léta.

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: