Programación Web y Scripting > PHP
Funcion De Validacion De Hora
(1/1)
janofx:
Hola a todos nuevamente... bueno les cuento mi problema... estoy haciendo una pequela funcion que valide una hora... es decir compruebe que la hora este en un rango de 0 a 23 y los minutos en un rango 0 a 59, si la hora esta en un formato "1:10", transformarlo en "01:10"... la funcion tiene que devolver un cero cuando los rangos estan incorrectos o cuando se ha ingresado un numero de 3 digitos.... y devolver la hora modificada (si hubiera sido necesario)
Ahora el problema es que, es que si la hora es cuando se llama a la funcion devuelve "0:0"... Como puedo mejorar este codigo... Existe alguna funcion de PHP que haga esto...
--- Código: Text ---$var = vali_hora($hora, $minutos);
--- Código: Text ---function vali_hora($hora, $minutos){if($hora > 23 OR $minutos > 59 OR strlen($hora)+strlen($minutos) > 4) return 0;if($hora < 10) $hh = "0$hora";if($minutos < 10) $mm = "0$minutos";if($hh != NULL AND $mm != NULL) return $horavalida = "$hh:$mm";}
bob esponja:
tte conviene ordenar un poco ese codigo
--- Código: Text --- <?php function validar( $hora, $minutos ){ if( $hora > 23 || $hora < 0 || gettype( $hora ) !== "integer" ) { return false; } if( $minutos > 59 || $minutos < 0 || gettype( $minutos ) !== "integer" ) { return false; } return true;} function format( $hora, $minutos ){ if( validar( $hora, $minutos ) ) { if( $hora < 10 ) { $hora = '0'.$hora; } if( $minutos < 10 ) { $minutos = '0'.$minutos; } return $hora.':'.$minutos; } return null;} function probar( $hora, $minutos ){ print( '<br/><br/>probando con hora: ' .$hora. ' y minutos: ' .$minutos ); if( validar( $hora, $minutos ) ) { print( '<br/>validan' ); } else { print( '<br/>no validan' ); } print( '<br/>formateado: \''.format( $hora, $minutos ) .'\'' );} probar( 12,5 );probar( 12,25 );probar( 26,5 );probar( 12,"casa" ); ?>
o mas facil (aunque con resultados bastante raros)
--- Código: Text ---echo '<br/>'.date( "G:i", strtotime( "12:5" ) );echo '<br/>'.date( "G:i", strtotime( "12:25" ) );echo '<br/>'.date( "G:i", strtotime( "26:5" ) );echo '<br/>'.date( "G:i", strtotime( "12:casa" ) );
la salida del primer codigo me dio lo siguiente:
--- Citar ---probando con hora: 12 y minutos: 5
validan
formateado: '12:05'
probando con hora: 12 y minutos: 25
validan
formateado: '12:25'
probando con hora: 26 y minutos: 5
no validan
formateado: ''
probando con hora: 12 y minutos: casa
no validan
formateado: ''
--- Fin de la cita ---
la salida del segundo:
--- Citar ---12:05
12:25
21:00
21:00
--- Fin de la cita ---
fijate el valor de los dos ultimos, eso si que es raro :D
janofx:
guau! que soy desordenado....
gracias por el dato bob_esponja... y gracias por la pronta respuesta
--- Citar ---fijate el valor de los dos ultimos, eso si que es raro
--- Fin de la cita ---
casa es igual a 0...no lo sabias? :D
EDITO::
La funcion si bien estaba buena, siempre devolvia un ":" lo cual era no nulo...entonces Agrege ese if que arregla eso...(justo era lo que me faltaba)
--- Código: Text ---function validar( $hora, $minutos ){ //Modifico if( $hora == NULL || $minutos == NULL) return NULL; //Fin if( $hora > 23 || $hora < 0 || gettype( $hora ) !== "integer" ) { return false; } if( $minutos > 59 || $minutos < 0 || gettype( $minutos ) !== "integer" ) { return false; } return true;}
de nuevo gracias por la luz
Navegación
Ir a la versión completa