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

[0] Índice de Mensajes

Ir a la versión completa