Autor Zpráva
Seva
Profil
Ahoj, potřebuji od uživatele ze stringu načíst čas ve tvaru HH:MM. Je na to nějaká funkce jako např. v PHP strtotime?

Díky za rady.


už jsem na to přišel. Nevím jestli je to nejelegantnější řešení, ale pro ty co by měli podobný problém, tak tady:

    var casOdUzivatele = prompt("Zadejte prosim cas");
    
     var hodiny = casOdUzivatele[0]+casOdUzivatele[1];
    var minuty = casOdUzivatele[3]+casOdUzivatele[4];
    
    
    
     if( isNaN(hodiny) || isNaN(minuty) ){
        alert("spatne zadane hodnoty");
    } else {
        alert("aktualni cas je: " + hodiny + ":" + minuty);
    }
_es
Profil
Seva:
Čo ak sa zadá čas vo formáte napríklad 8:15?
Stačilo chvíľu hľadať, napríklad: Zadaná data převést na datum
Chamurappi
Profil
Reaguji na Sevu:
Tvoje řešení nefunguje ve všech prohlížečích.
Seva
Profil
Pravda. Nějak jsem zapomněl to pořádně otestovat. Nové řešení pomocí regulárního výrazu snad bude více blbuvzdordné. Prosím o reakce na toto řešení. V JavaScriptu dělám pár dnů.

var cas = "0:20";

 //overeni zda je cas zadan ve spravnem tvaru HH:MM nebo H:MM a v rozmezi 0:00-23:59
if( cas.test(/^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$/) ){
    cas = cas.split(":");

     var hodin = parseInt(cas[0], 10);
    var minut = parseInt(cas[1], 10);

     document.write(hodin + ":" + minut);
}
Sir Tom
Profil
Seva:
Moc tomu nerozumím - nejdříve máš var cas = "0:20" a na konci algoritmu dostaneš totéž - k čemu to?
panther
Profil
Sir Tom:
tipnu si, že to je jen pomocná proměnná, v [#1] bere data z promptu.
Chamurappi
Profil
Reaguji na Sevu:
Není náhodou test metoda na instancích RegExpu, která přijímá jako argument řetězec? Tedy opačně, než uvádíš?
Použil bych na tvém místě raději match (ten je na řetězci), pak nemusíš splitovat, stačí si vytáhnout matchnuté podskupiny.
Seva
Profil
Chamurappi:
Zajímavé, že mi to fungovalo i opačným způsobem :)
Nevím jak match přesně funguje, takže asi zůstanu u split.

Sir Tom:
Tady co řešíme je jak dostat do proměnné data od uživatele ve validním formátu. V mém projektu s nimi už nějak pracuji, jen je to zbytečné tady rozvádět ;)


    var cas= "20:19";

     //regexp pro overeni zda je cas zadan ve spravnem tvaru HH:MM nebo H:M a v rozmezi 0:00-23:59
    var regVyraz = /^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$/;
    
     if (regVyraz.test(cas)) {
        cas = cas.split(":");

         hodin = parseInt(cas[0], 10);
        minut = parseInt(cas[1], 10);
    }
peta
Profil
function formatTime(date,format)    // Y-m-d H:i:s
{
var f,i,v,str;
var format = format ? format : "Y-m-d H:i:s";
f = {
  'Y':'FullYear',
  'y':'FullYear',
  'm':'Month',
  'n':'Month',
  'd':'Date',
  'j':'Date',
  'H':'Hours',
  'G':'Hours',
  'h':'Hours',
  'g':'Hours',
  'i':'Minutes',
  's':'Seconds'
  }
for (i in f)
    {
    v = date['get'+f[i]]();
    v = ("nm".indexOf(i)!=-1) ? v + 1 : v;    // month+1
    v = ("h".indexOf(i)!=-1) ? v % 12 : v;    // 12/24 hour
    v = ("ymdHhis".indexOf(i)!=-1) ? ("00"+v).substring(("00"+v).length-2) : v;    // double
    format = format.replace(i,v);
    }
return format;
}

  formatTime(new Date(),"Y-m-d H:i:s");

Ja bych to prevedl na casove razitko a tim overis, ze je to ok.
<script>
function testCas(str)
{
var reg,hodin,minut;
hodin = '?';
minut = '?';
reg = /[^0-9:]|^[^0-9]|[^0-9]$/g;
str = str.replace(reg,''); //odstran plevel od uzivatele
reg = /^(2[0-3]|[0-1][0-9]|[0-9])\:([0-5][0-9]|[0-9])$/; // v tom vyrazu bych to psal opacne, od nej cisel po mensi a mas tam zbytecne zavorky
if (reg.test(str))
{ 
  cas = str.split(":"); 
  hodin = parseInt(cas[0], 10); 
  minut = parseInt(cas[1], 10); 
}
alert([str,hodin,minut]);
}
testCas(" 20 : 19 ");
testCas(":20:19:");
testCas(":020:019:");
testCas("20:19");
testCas("2:9");
testCas("02:09");
testCas("24:60");
</script>

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