| 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: 10 let
|
|||
0