• Lunes 23 de Diciembre de 2024, 00:27

Autor Tema:  Funcion De Validacion De Hora  (Leído 2818 veces)

janofx

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Funcion De Validacion De Hora
« en: Sábado 14 de Julio de 2007, 08:44 »
0
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
  1. $var = vali_hora($hora, $minutos);
  2.  

Código: Text
  1. function vali_hora($hora, $minutos)
  2. {
  3. if($hora > 23 OR $minutos > 59 OR strlen($hora)+strlen($minutos) > 4)
  4.   return 0;
  5. if($hora < 10)
  6.   $hh = "0$hora";
  7. if($minutos < 10)
  8.   $mm = "0$minutos";
  9. if($hh != NULL AND $mm != NULL)
  10.   return $horavalida = "$hh:$mm";
  11. }
  12.  

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Funcion De Validacion De Hora
« Respuesta #1 en: Sábado 14 de Julio de 2007, 12:16 »
0
tte conviene ordenar un poco ese codigo
Código: Text
  1.  
  2. <?php
  3.  
  4. function validar( $hora, $minutos )
  5. {
  6.     if( $hora > 23 || $hora < 0 || gettype( $hora ) !== "integer" )
  7.     {
  8.         return false;
  9.     }
  10.  
  11.     if( $minutos > 59 || $minutos < 0 || gettype( $minutos ) !== "integer" )
  12.     {
  13.         return false;
  14.     }
  15.  
  16.     return true;
  17. }
  18.  
  19. function format( $hora, $minutos )
  20. {
  21.     if( validar( $hora, $minutos ) )
  22.     {
  23.         if( $hora < 10 )
  24.         {
  25.             $hora = '0'.$hora;
  26.         }
  27.  
  28.         if( $minutos < 10 )
  29.         {
  30.             $minutos = '0'.$minutos;
  31.         }
  32.  
  33.         return $hora.':'.$minutos;
  34.     }
  35.  
  36.     return null;
  37. }
  38.  
  39. function probar( $hora, $minutos )
  40. {
  41.     print( '<br/><br/>probando con hora: ' .$hora. ' y minutos: ' .$minutos );
  42.  
  43.     if( validar( $hora, $minutos ) )
  44.     {
  45.         print( '<br/>validan' );
  46.     }
  47.     else
  48.     {
  49.         print( '<br/>no validan' );
  50.     }
  51.  
  52.     print( '<br/>formateado: \''.format( $hora, $minutos ) .'\'' );
  53. }
  54.  
  55. probar( 12,5 );
  56. probar( 12,25 );
  57. probar( 26,5 );
  58. probar( 12,"casa" );
  59.  
  60. ?>
  61.  
  62.  

o mas facil (aunque con resultados bastante raros)

Código: Text
  1. echo '<br/>'.date( "G:i", strtotime( "12:5" ) );
  2. echo '<br/>'.date( "G:i", strtotime( "12:25" ) );
  3. echo '<br/>'.date( "G:i", strtotime( "26:5" ) );
  4. echo '<br/>'.date( "G:i", strtotime( "12:casa" ) );
  5.  

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: ''

la salida del segundo:

Citar
12:05
12:25
21:00
21:00

fijate el valor de los dos ultimos, eso si que es raro :D

janofx

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Funcion De Validacion De Hora
« Respuesta #2 en: Sábado 14 de Julio de 2007, 16:40 »
0
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

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
  1. function validar( $hora, $minutos )
  2. {
  3.    //Modifico
  4.    if( $hora == NULL || $minutos == NULL)
  5.        return NULL;
  6.    //Fin
  7.    if( $hora > 23 || $hora < 0 || gettype( $hora ) !== "integer" )
  8.    {
  9.        return false;
  10.    }
  11.  
  12.    if( $minutos > 59 || $minutos < 0 || gettype( $minutos ) !== "integer" )
  13.    {
  14.        return false;
  15.    }
  16.  
  17.    return true;
  18. }
  19.  

de nuevo gracias por la luz