Foros del Web » Programando para Internet » Javascript »

Como Validar un campo Hora?

Estas en el tema de Como Validar un campo Hora? en el foro de Javascript en Foros del Web. Necesito validar un campo en el que el usuario introducirá la hora de un evento a realizarse y necesito una rutina que me permita comprobar ...
  #1 (permalink)  
Antiguo 08/03/2004, 08:10
 
Fecha de Ingreso: enero-2004
Ubicación: Maturin
Mensajes: 54
Antigüedad: 20 años, 3 meses
Puntos: 1
Pregunta Como Validar un campo Hora?


Necesito validar un campo en el que el usuario introducirá la hora de un evento a realizarse y necesito una rutina que me permita comprobar que introdujo una hora valida, tambien me sirve mostrar un reloj del cual el usuario pueda seleccionar la hora y al acceptar que los valores se peguen en el input text correspondiente. He buscado en varios sitios de internet y en las faq's javascript de aqui pero nada
Si alguien puede ayudarme se lo agradecería...
__________________
En la busqueda de la verdad
  #2 (permalink)  
Antiguo 08/03/2004, 12:09
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 22 años, 11 meses
Puntos: 25
Hola.

A ver si te sirve esto:

<script>
// script para validar una hora en formato 24h. Por Carlitos ([email protected])//
function valida(str)
{
hora=str.value
if (hora.length>4) {alert("muy largo");return}
if (hora.length!=4) {alert("introducir HHMM");return}
a=hora.charAt(0)
b=hora.charAt(1)
c=hora.charAt(2)
if (a>=2 && b>3) {alert("hora mal :(");return}
if (c>5) {alert("minutos mal :(");return}
alert("hora bien. :)")
}
</script>
Hora (HHMM):<input type="text" name="hhmm" size="4">
<input type="button" value="Valida" onclick="valida(hhmm)">


Un saludo.

Última edición por Carlitos; 08/03/2004 a las 12:13
  #3 (permalink)  
Antiguo 08/03/2004, 12:20
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 22 años, 11 meses
Puntos: 25
claro que ahora que lo pienso, .

la linea:
Código:
if (hora.length>4) {alert("muy largo");return}
no haría falta ponerla ya que la siguiente, también controla el tamaño.

un saludo.
  #4 (permalink)  
Antiguo 09/03/2004, 07:07
 
Fecha de Ingreso: enero-2004
Ubicación: Maturin
Mensajes: 54
Antigüedad: 20 años, 3 meses
Puntos: 1
Gracias

Carlitos, sabes que para cuando lei lo que tan amablemente escribiste ya habia hecho lo siguiente, coloque al lado del input text que captura la hora, un botón, al pulsar el boton se abre una ventana pequeñita que tiene 2 select en una tabla con dos columnas, entre los dos select puse el signo ":" y al final un boton de aceptar, el primer select tiene valores del 01 al 24 y el segundo select valores del 01 al 60, al pulsar el boton aceptar, con una funcion armo la hora, copio los datos en la ventana madre (opener), en el input text de la hora y cierro la ventana. Sin embargo probaré tu código y y de estar "ok" lo pondre en el onblur del input text de la hora por sia el usuario decide escribirla y no seleccionarla y así valido que la escriba bien. Abajo copio el código que creé para seleccionar la hora:

ESTE ES EL CÓDIGO QUE CONTIENE EL ARCHIVO HORA.HTM:
Código PHP:
<html>
<
head>
<
title>Documento sin t&iacute;tulo</title>
  <
script language="JavaScript">
    function 
openNewWindow(url,h,w,UrlVar,NameControlOValorVarNameWindow){//La Variable UrlVar debe contener el signo "?" antes del nombre y el signo "=" despues, ej: UrlVar=?CodProd=, para asi armar el parametro a enviar por la url
    
if (UrlVar!='') {
    
url=url UrlVar NameControlOValorVar;
    }
    
    var 
= (screen.width w) / 2;
    var 
= (screen.height h) / 2;
    var 
Wnd;
    
//
    
Wnd=open(url,NameWindow"top=" ",left=" ", width=" ", height=" " , status=no,toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no,resizable=no,copyhistory=no,directories=no");
    if (
parseInt(navigator.appVersion) >= 4win.window.focus();
    }

</script>

<style type="text/css">
<!--
.textodeinput {
    font-family: "Franklin Gothic Medium";
    font-size: 12px;
    font-style: normal;
    font-weight: normal;
}

}.textoespaciado {
    background-color: #DFF3FF;
    font-family: Georgia, "Times New Roman", Times, serif;
    font-size: 12px;
    font-weight: bold;
}

.Estilo5 {
    color: #004080;
    font-family: "Franklin Gothic Medium";
    font-weight: bold;
    font-style: italic;
    text-decoration: underline;
}
.Estilo12 {
    font-size: 14px;
    color: #006699;
}

-->
</style>

</head>

<body>
  <form name="frm" method="post" action="">
    <table>
      <tr bgcolor="#E1ECF4">
        <td height="52" align="right" class="Estilo5"><div align="right" class="Estilo5">Hora:</div></td>
        <td><label> </label>
            <table width="100%"  border="0">
              <tr>
                <td width="13%"><input type=text name=txtHoraEvento class="textodeinput" onBlur="checktime(this)" size=12 maxlength=11></td>
                <td width="7%">
                  <input name="boton" type="button" class="textoespaciado" onClick="openNewWindow('EscogerHora.htm',150,180,'',document.forms['frm']['txtHoraEvento'].value,'ChoiceTime')" value="..."></td>
                <td width="80%"><span class="Estilo12">(hh:mm:ss)</span></td>
              </tr>
          </table></td>
      </tr>
    </table>
  </form>
  <p>&nbsp;</p>
  </body>
</html> 
ESTE ES EL CODIGO QUE CONTIENE LA VENTANA PARA SELECCIONAR LA HORA (EscogerHora.htm)
Código PHP:

<html>
<
head>
<
title>Escoger Hora</title>
  <
script language="JavaScript">
       function 
ColocarHora(){
            var 
varHora=document.forms['frmHora']['lstHora'].value ":" document.forms['frmHora']['lstMinutos'].value ":00"
            
opener.document.forms['frm']['txtHoraEvento'].value varHora;
            
opener.document.forms['frm']['txtHoraEvento'].select()
            
opener.document.forms['frm']['txtHoraEvento'].focus()
            
close();
       }
  
</script>
<style type="text/css">
<!--
.buttonlink {
    font-family: "Franklin Gothic Medium";
    font-size: 12px;
    font-style: italic;
    font-weight: bold;
    color: #CC3333;
    text-decoration: underline;
}
-->
</style>
</head>

<body>
<form name="frmHora" method="post" action="">
  <table width="132" border="1">
    <tr>
      <td width="100%"><table width="100%"  border="0">
        <tr>
          <td width="50%" ><select name="lstHora" id="lstHora">
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
            <option value="19">19</option>
            <option value="20">20</option>
            <option value="21">21</option>
            <option value="22">22</option>
            <option value="23">23</option>
            <option value="24">24</option>
          </select>
          :</td>
          <td width="50%"><select name="lstMinutos" id="lstMinutos">
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
            <option value="19">19</option>
            <option value="20">20</option>
            <option value="21">21</option>
            <option value="22">22</option>
            <option value="23">23</option>
            <option value="24">24</option>
            <option value="25">25</option>
            <option value="26">26</option>
            <option value="27">27</option>
            <option value="28">28</option>
            <option value="29">29</option>
            <option value="30">30</option>
            <option value="31">31</option>
            <option value="32">32</option>
            <option value="33">33</option>
            <option value="34">34</option>
            <option value="35">35</option>
            <option value="36">36</option>
            <option value="37">37</option>
            <option value="38">38</option>
            <option value="39">39</option>
            <option value="40">40</option>
            <option value="41">41</option>
            <option value="42">42</option>
            <option value="43">43</option>
            <option value="44">44</option>
            <option value="45">45</option>
            <option value="46">46</option>
            <option value="47">47</option>
            <option value="48">48</option>
            <option value="49">49</option>
            <option value="50">50</option>
            <option value="51">51</option>
            <option value="52">52</option>
            <option value="53">53</option>
            <option value="54">54</option>
            <option value="55">55</option>
            <option value="56">56</option>
            <option value="57">57</option>
            <option value="58">58</option>
            <option value="59">59</option>
            <option value="60">60</option>
            </select>
          </td>
        </tr>
      </table></td>
    </tr>
  </table>
  <table width="100%"  border="0">
    <tr>
      <td height="40" align="center" valign="bottom"><input name="btnAceptar" type="button" class="buttonlink" id="btnAceptar" value="Aceptar"  onClick="ColocarHora()"></td>
    </tr>
  </table>
</form>
</body>
</html> 
__________________
En la busqueda de la verdad
  #5 (permalink)  
Antiguo 09/03/2004, 12:36
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 22 años, 11 meses
Puntos: 25
Bueno, me alegro de que lo hayas solucionado.
  #6 (permalink)  
Antiguo 10/03/2004, 12:03
 
Fecha de Ingreso: enero-2004
Ubicación: Maturin
Mensajes: 54
Antigüedad: 20 años, 3 meses
Puntos: 1
Validar la hora

Bueno Carlos Tomé el ejemplo que me diste lo modifique un poco y tengo tambien mi rutina de validación de horas y la quiero compartir con ustedes, el codigo del script debe pegarse debajo de <head> como ya sabemos o en un archivo javascript si es que tienen los scripts aparte, el script de la funcion es el que sigue:
Código PHP:
  <script language="JavaScript">
function 
CheckTime(str)
{
hora=str.value
if (hora=='') {return}
if (
hora.length>8) {alert("Introdujo una cadena mayor a 8 caracteres");return}
if (
hora.length!=8) {alert("Introducir HH:MM:SS");return}
a=hora.charAt(0//<=2
b=hora.charAt(1//<4
c=hora.charAt(2//:
d=hora.charAt(3//<=5
e=hora.charAt(5//:
f=hora.charAt(6//<=5
if ((a==&& b>3) || (a>2)) {alert("El valor que introdujo en la Hora no corresponde, introduzca un digito entre 00 y 23");return}
if (
d>5) {alert("El valor que introdujo en los minutos no corresponde, introduzca un digito entre 00 y 59");return}
if (
f>5) {alert("El valor que introdujo en los segundos no corresponde");return}
if (
c!=':' || e!=':') {alert("Introduzca el caracter ':' para separar la hora, los minutos y los segundos");return}
  
</script>

El codigo que representa al input text de la hora quedaria así:
Código PHP:
<input type=text name=txtHora onBlur="CheckTime(this)" size=12 maxlength=10
.


Solo tengo que añadir que realice cambios al archivo EscogerHora.htm, del que les hablo unas respuestas arriba de esta debido a que en el select que habia creado para la hora las opciones empezaban en 01 y terminaban en 24, cuando en realidad deben empezar en 00 y terminar en 24.
Cambie tambien el select correpondiente a los minutos que empezabas en 01 y terminaba en 60, colocando como primera opcion 00 y ultima 59, y asi tenemos entonces 2 formas de que el usuario coloque la fecha, ya sea seleccionandola con el archivo del que les habla arriba, o escribiendola usando el script que les coloque aqui

chao y gracias
__________________
En la busqueda de la verdad
  #7 (permalink)  
Antiguo 10/03/2004, 15:13
Avatar de Carlitos
Usuario no validado
 
Fecha de Ingreso: mayo-2001
Ubicación: Zaragoza
Mensajes: 1.304
Antigüedad: 22 años, 11 meses
Puntos: 25
Lo voy a introducir en las faq. Te parece bien?
  #8 (permalink)  
Antiguo 10/03/2004, 22:10
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Me apunto a este tema

Hola a todos!!

He visto este tema y creo que lo que yo necesito es similar:

Una forma de validar la fecha en formato dd/mm/aaaa para un <input type="text"> de un form.

¿Me podéis echar una mano?

Muchas gracias

Salu2

Rubén
  #9 (permalink)  
Antiguo 11/03/2004, 07:04
 
Fecha de Ingreso: enero-2004
Ubicación: Maturin
Mensajes: 54
Antigüedad: 20 años, 3 meses
Puntos: 1
WOOW!!! POR SU... QUE YES

CLARO POR SUPUESTO QUE PUEDES COLOCARLO EN LAS FAQ'S CARLITOS...

EN CUANTO A TI RUBEN, EN LAS FAQ'S DE JAVASCRIPT EN EL REGLON DE FECHA HORA HAY UNAS RUTINAS PARA VALIDACION DE FECHAS, AUNQUE YO DE AQUI Y DE ALLA ARME LAS MIAS, TOME DE LAS FAQ'S EL CALENDARIO POR SI EL CLIENTE QUERIA ESCOGER LA FECHA Y NO ESCRIBIRLA. Y ADEMAS DE VARIOS LINKS EN INTERNET Y DE LAS FAQ'S DE JAVASCRIPT DE FECHA Y HORA TOME LAS VALIDACIONES DE LA FECHA EN EL CASO QUE EL USUARIO QUISIERA ESCRIBIR LA FECHA, SOLO TIENE QUE LLAMARLAS DESDE EL METODO ONBLUR DEL INPUT TEXT DE LA FECHA PARA QUE LAS VALIDES, Y OTRA RECOMENDACION ES QUE SI QUIERES TAMBIEN ANEXAR EL CALENDARIO COLOQUES EL FOCO EN EL INPUT TEXT DE LA FECHA AL CERRARSE LA VENTANA PARA UE TE VALIDE LO SELECCIONADO, POR SI A LAS MOSCAS Y EL USUARIO SELECCIONO UNA FECHA ANTERIOR A LA ACTUAL, (ESO EN EL CASO DE QUE SOLO PUEDA COLOCAR UNA FECHA . IGUAL O POSTERIOR A LA ACTUAL) ESPERO HAYAS ENTENDIDO, ME ENREDO UN POCO EXPLICANDO

CHAO
__________________
En la busqueda de la verdad
  #10 (permalink)  
Antiguo 11/03/2004, 07:11
 
Fecha de Ingreso: enero-2004
Ubicación: Maturin
Mensajes: 54
Antigüedad: 20 años, 3 meses
Puntos: 1
WOOW!!! POR SU... QUE YES

CLARO POR SUPUESTO QUE PUEDES COLOCARLO EN LAS FAQ'S CARLITOS...

EN CUANTO A TI RUBEN, EN LAS FAQ'S DE JAVASCRIPT EN EL REGLON DE FECHA HORA HAY UNAS RUTINAS PARA VALIDACION DE FECHAS, AUNQUE YO DE AQUI Y DE ALLA ARME LAS MIAS, TOME DE LAS FAQ'S EL CALENDARIO POR SI EL CLIENTE QUERIA ESCOGER LA FECHA Y NO ESCRIBIRLA. Y ADEMAS DE VARIOS LINKS EN INTERNET Y DE LAS FAQ'S DE JAVASCRIPT DE FECHA Y HORA TOME LAS VALIDACIONES DE LA FECHA EN EL CASO QUE EL USUARIO QUISIERA ESCRIBIR LA FECHA, SOLO TIENE QUE LLAMARLAS DESDE EL METODO ONBLUR DEL INPUT TEXT DE LA FECHA PARA QUE LAS VALIDES, Y OTRA RECOMENDACION ES QUE SI QUIERES TAMBIEN ANEXAR EL CALENDARIO COLOQUES EL FOCO EN EL INPUT TEXT DE LA FECHA AL CERRARSE LA VENTANA PARA UE TE VALIDE LO SELECCIONADO, POR SI A LAS MOSCAS Y EL USUARIO SELECCIONO UNA FECHA ANTERIOR A LA ACTUAL, (ESO EN EL CASO DE QUE SOLO PUEDA COLOCAR UNA FECHA . IGUAL O POSTERIOR A LA ACTUAL) ESPERO HAYAS ENTENDIDO, ME ENREDO UN POCO EXPLICANDO

CHAO
__________________
En la busqueda de la verdad
  #11 (permalink)  
Antiguo 13/03/2004, 11:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Hola AnaLezama y Carlitos!!

La verdad es que no entiendo nada de lo que me dices .

Yo lo que necesito es que el usuario introduzca una fecha (de nacimiento), que sea anterior a 1986
(por la mayoría de edad) y que se valide o quede en el formato dd/mm/aaaa, ya que hay gente que, a pesar de estar el ejemplo junto al recuadro del text,
la coloca como dd-mm-aa, d-m-aa, ddmmaaaa o dmaa, con lo cual a la hora de usar, por ejemplo el script creo que era de Karlankas,
de los cumpleaños, procesarlas con algún CGI para enviar felicitaciones o lo que sea, si no tienen un formato "unificado" es más problemático.

Yo de programación en general tengo muy poca o nada de idea, voy aprendiendo sobre la marcha con lo que voy haciendo
y gracias a los super expertos que hay en estos foros y que siempre estáis dispuestos a ayudar a los "novatos".

En fin, pues ese es el problema que tengo, en la FAQ nº 13 casi se me resuelve el problema pero me falta saber qué modificar para
que el año se tenga que poner con 4 dígitos, el separador como / sí he conseguido hacerlo pero los dígitos del año no.

Aquí pongo el código como lo he modificado yo:

<script language="JavaScript">

function esDigito(sChr){
var sCod = sChr.charCodeAt(0);
return ((sCod > 47) && (sCod < 58));
}

function valSep(oTxt){
var bOk = false;
var sep1 = oTxt.value.charAt(2);
var sep2 = oTxt.value.charAt(5);
bOk = bOk || ((sep1 == "/") && (sep2 == "/"));
return bOk;
}

function finMes(oTxt){
var nMes = parseInt(oTxt.value.substr(3, 2), 10);
var nAno = parseInt(oTxt.value.substr(6), 10);
var nRes = 0;
switch (nMes){
case 1: nRes = 31; break;
case 2: nRes = 28; break;
case 3: nRes = 31; break;
case 4: nRes = 30; break;
case 5: nRes = 31; break;
case 6: nRes = 30; break;
case 7: nRes = 31; break;
case 8: nRes = 31; break;
case 9: nRes = 30; break;
case 10: nRes = 31; break;
case 11: nRes = 30; break;
case 12: nRes = 31; break;
}
return nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
}

function valDia(oTxt){
var bOk = false;
var nDia = parseInt(oTxt.value.substr(0, 2), 10);
bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
return bOk;
}

function valMes(oTxt){
var bOk = false;
var nMes = parseInt(oTxt.value.substr(3, 2), 10);
bOk = bOk || ((nMes >= 1) && (nMes <= 12));
return bOk;
}

function valAno(oTxt){
var bOk = true;
var nAno = oTxt.value.substr(6);
bOk = bOk && ((nAno.length == 4) || (nAno.length == 4));
if (bOk){
for (var i = 0; i < nAno.length; i++){
bOk = bOk && esDigito(nAno.charAt(i));
}
}
return bOk;
}

function valFecha(oTxt){
var bOk = true;
if (oTxt.value != ""){
bOk = bOk && (valAno(oTxt));
bOk = bOk && (valMes(oTxt));
bOk = bOk && (valDia(oTxt));
bOk = bOk && (valSep(oTxt));
if (!bOk){
alert("Fecha inválida");
oTxt.value = "";
oTxt.focus();
}
}
}

</script>


Lo que tampoco se es cómo llamar a la función para que se verifique antes de enviar el form, además tengo
scripts para validar el e-mail y repetirlo (onsubmit="javascript:emailCheck(this.email1.value) ;return checkPw(this)"),
para cambiar todos los campos a minúsculas (onChange="javascript:this.value=this.value.toLower Case()";),
y al enviar, cambiar cada 1ª letra de todas las palabras de cada campo a mayúsculas
(onClick="javascript:changeCase(this.form.nombre);c hangeCase(this.form.apellidos);...).
Así que tengo un lío... . Espero que alguien me pueda ayudar.
No se si es mejor o más conveniente verificar la fecha al cambiar de campo (según lo ponía no me acepta "onChange") o al enviar el form.

¡¡Necesito ayuda!! Estoy hecho un lío

Muchas gracias por adelantado.

Salu2

Rubén
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:15.