Autor Zpráva
mackopu
Profil
Používám funkci
function timeToHours(time) {
  str = time.split(':');
  hod2sec = str[0] * 3600;
  min2sec = str[1] * 60;
  sec = str[2];
  secsum = hod2sec + min2sec + sec;
  hodin = secsum / 360000;
  return hodin;
}
Jediným parametrem funkce je textový řetězec ve formátu hodin:minut:sekund, bez doplněných nul - tedy např. 13:5:26 (13 hodin, pět minut a 26 sekund). Účelem je docílit výstupu v hodinách, případně hodinách a jejich desetinných zlomcích.

Jestliže funkce zpracuje řetězec 14:30:24, je vše v pořádku a výstupem je 14.500066666666667 hod..
Při vstupu 14:30:8 to ale vyhodí 1.4500222222222223 hod., což je hloupost.

Kde je chyba?
ShiraNai7
Profil
Zkus:

function timeToHours(time) {
  str = time.split(':');
  hod2sec = parseInt(str[0]) * 3600;
  min2sec = parseInt(str[1]) * 60;
  sec = parseInt(str[2]);
  secsum = hod2sec + min2sec + sec;
  hodin = secsum / 360000;
  return hodin;
}
mackopu
Profil
ShiraNai7:
Super, to je ono. Jen ještě bylo třeba secsum / 360000 změnit na secsum / 3600.

Díky moc!
_es
Profil
Bolo by dobré použiť príkaz var.
ShiraNai7ova funkcia nebude správne fungovať pri úvodných nulách (vysvetlenie).

function timeToHours(time) {
  var s = time.split(':');
  return +s[0] + +s[1]/60 + +s[2]/3600;
}
mackopu
Profil
Zajímavé. Jak to tedy ošetřit při vstupním řetězci 0:0:3 (tři vteřiny po půlnoci)?
_es
Profil
mackopu:
Myslel som to, že ak by v tom formáte bolo napríklad 09, že by to tie hodiny zle zrátalo.
Funkcia, ktorú som napísal, by tento prípad mala vyrátať správne.
Síce si písal, že úvodné (doplnené) nuly tam nemáš, no predsa len by to malo fungovať všeobecnejšie.
mackopu
Profil
_es:
Už jsem si s tím hrál, a zdá se, že
parseInt(str[0], 10)
to řeší, protože to vnutí desítkovou soustavu.
_es
Profil
mackopu:
… to řeší …
to rieši aj moja, oveľa kratšia funkcia.

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:

0