Autor | Zpráva | ||
---|---|---|---|
MONTYCEK Profil |
#1 · Zasláno: 22. 5. 2015, 10:02:30
Zdravím, jakým způsobem by se dalo nejlépe ošetřit zadaný čas, tak aby výsledek byl například 16:00, 17:30, 15:12 i v případě, že do formuláře bude zadáno 16.00, nebo 16.
|
||
juriad Profil |
Třeba takto:
function parseTime($input) { $parts = preg_split('/[^0-9]/', $input, -1, PREG_SPLIT_NO_EMPTY); $numbers = array(); foreach ($parts as $index => $part) { $numbers[] = ((int) $part) % ($index == 0 ? 24 : 60); } $numbers[] = 0; $numbers[] = 0; # leave out the emphasized zero if you like it more that way return sprintf("%02d:%02d", $numbers[0], $numbers[1]); } foreach (array('16', '', '16.52', '7:0', 'sdc', '10 : 67', '4:5:6') as $in) { echo parseTime($in), "\n"; } |
||
MONTYCEK Profil |
#3 · Zasláno: 22. 5. 2015, 10:23:28
juriad:
Díky vyzkouším |
||
Jan Tvrdík Profil |
#4 · Zasláno: 22. 5. 2015, 10:48:37
juriad:
Poslední tři řádky té funkce jsou zjednodušit na return vsprintf("%02d:%02d", $numbers + [0, 0]); |
||
Alphard Profil |
#5 · Zasláno: 22. 5. 2015, 11:29:43
I tak mi to přijde jako zbytečně magický workaround. Proč tam ty nuly nedát hned při inicializaci?
$numbers = [0, 0]; foreach ($parts as $index => $part) { $numbers[$index] = ((int) $part) % ($index == 0 ? 24 : 60); } |
||
juriad Profil |
Hm, obě možnosti jsou zajímavé a o něco kratší.
Ještě je možné (nikoli doproručené) 7. a 8. řádek odstranit a ten sprintf ozavináčovat (znalí vědí). Alphard: Protože jsem tam původně ten $index jako klíč ve foreach neměl a přidal jsem jej později pro to modulo. A v ten okamžik jsem už přidání na konec pole měl hotové. |
||
Časová prodleva: 9 let
|
0