Autor | Zpráva | ||
---|---|---|---|
Seva Profil |
#1 · Zasláno: 20. 12. 2011, 21:55:38 · Upravil/a: Seva
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 |
#2 · Zasláno: 21. 12. 2011, 01:24:14
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 |
#3 · Zasláno: 21. 12. 2011, 01:25:41
Reaguji na Sevu:
Tvoje řešení nefunguje ve všech prohlížečích. |
||
Seva Profil |
#4 · Zasláno: 21. 12. 2011, 13:42:00
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 |
#5 · Zasláno: 21. 12. 2011, 14:13:51
Seva:
Moc tomu nerozumím - nejdříve máš var cas = "0:20" a na konci algoritmu dostaneš totéž - k čemu to?
|
||
panther Profil |
#6 · Zasláno: 21. 12. 2011, 14:16:54 · Upravil/a: panther
|
||
Chamurappi Profil |
#7 · Zasláno: 21. 12. 2011, 14:29:18
Reaguji na Sevu:
Není náhodou test metoda na instancích RegExp u, 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íš split ovat, stačí si vytáhnout matchnuté podskupiny.
|
||
Seva Profil |
#8 · Zasláno: 21. 12. 2011, 16:13:34 · Upravil/a: Seva
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 |
#9 · Zasláno: 21. 12. 2011, 17:46:56
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> |
||
Časová prodleva: 12 let
|
0