Ver Mensaje Individual
  #7 (permalink)  
Antiguo 26/05/2006, 13:39
fermdp
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 24 años, 10 meses
Puntos: 0
Bueno toy como los locos me contesto solo !!!

Aqui la respuesta aparente a lo que queria hacer !!! Digo aparente porque ANDA pero SUPONGO que se podria hacer con muchas menos lineas de codigo !!!, No se casi nada de javascript pero de tanto ver ejemplo, leer las FAQ's llegue a la "Recopilacion" de unos cuantos script, los fui editando (durante varias horas) hasta que logre que todos los code trabajen como yo queria. Me gustaria que lo vieran y me den concejos de como optimizarlo porque de seguro es un collage infernar de lineas que copy paste mediante recolecte de lugares y autores varios, luego agrego los creditos a quienes corresponda.

Ejemplo.html
Código PHP:
<html>
<
head>
<
script language="JavaScript" src="libreria.js"></script>
<script language="JavaScript" src="validar_fecha.js"></script>
<script language="JavaScript" src="resta_horas.js"></script>
<title>ejemplo </title>
</head>
<body onLoad="calcT3();">
<form name="frm">
TimeCode:<br>
<input name = "t1" type="text" onKeypress="solo_numeros()" onChange="rellenar(this,this.value)" onBlur="mascara(this,':',patron,true); tiempo_mal(this); calcT3()" size="8" maxlength="8"><br>
<input name = "t2" type="text" onKeypress="solo_numeros()" onChange="rellenar(this,this.value)" onBlur="mascara(this,':',patron,true); tiempo_mal(this); calcT3()" size="8" maxlength="8"><br><hr>
<input name = "t3" type="text" onClick="calcT3()" onFocus="calcT3()" onBlur="calcT3()" size="8" maxlength="8">
</form> 
</body>
</html> 
libreria.js
Código PHP:
// Validar Horas, Fechas, llenar con Ceros. Agregar ":" a las horas, agregar "/" a las fechas.
// Horas con formato: 23:59:59 (HH:MM:SS)
// Fechas con formato: 12/12/2006 (DD/MM/AAAA)

function solo_numeros(){ /*** Deja entrar solo numeros ***/
var key=window.event.keyCode;//toma el codigo de tecla.
if (key < 48 || key > 57){//si no es un numero
window.event.keyCode=0;//anula la entrada de texto.
}}

function 
rellenar(quien,que){ /*** Rellena con ceros a la izquierda el valor ingresado ***/
cadcero='';
for(
i=0;i<(6-que.length);i++){
cadcero+='0';
}
quien.value=cadcero+que;
}

var 
patron = new Array(2,2,2) /*** Formato de Hora Para el TimeCode 00:00:00 ***/
var fecha = new Array(2,2,4) /*** Formato para la Fecha ***/
function mascara(d,sep,pat,nums){ /*** Agrega el separador indicado ***/
if(d.valant != d.value){
    
val = d.value
    largo 
= val.length
    val 
= val.split(sep)
    
val2 = ''
    
for(r=0;r<val.length;r++){
        
val2 += val[r]    
    }
    if(
nums){
        for(
z=0;z<val2.length;z++){
            if(
isNaN(val2.charAt(z))){
                
letra = new RegExp(val2.charAt(z),"g")
                
val2 = val2.replace(letra,"")
            }
        }
    }
    
val = ''
    
val3 = new Array()
    for(
s=0; s<pat.length; s++){
        
val3[s] = val2.substring(0,pat[s])
        
val2 = val2.substr(pat[s])
    }
    for(
q=0;q<val3.length; q++){
        if(
q ==0){
            
val = val3[q]
        }
        else{
            if(
val3[q] != ""){
                
val += sep + val3[q]
                }
        }
    }
    
d.value = val
    d
.valant = val
    
}
}

function 
tiempo_mal(str) /*** Avisa que los segundos, minutos y horas ingresadas estan mal ***/
{
hora=str.value
if (hora=='') {return}
a=hora.charAt(0) //<=2
b=hora.charAt(1) //<4
d=hora.charAt(3) //<=5
f=hora.charAt(6) //<=5
if (f>5) {alert("El valor que introdujo en los Segundos no corresponde\n ingrese un valor entre 00 y 59");return}
if (
d>5) {alert("El valor que introdujo en los Minutos no corresponde\n ingrese un valor entre 00 y 59");return}
if ((
a==2 && b>3) || (a>2)) {alert("El valor que introdujo en la Hora no corresponde\n ingrese un valor entre 00 y 23");return}
} 
resta_horas.js

Código PHP:
   function padNmb(nStr, nLen){ 
    var 
sRes = String(nStr); 
    var 
sCeros = "0000000000"; 
    return 
sCeros.substr(0, nLen - sRes.length) + sRes; 
   } 

   function 
stringToSeconds(tiempo){ 
    var 
sep1 = tiempo.indexOf(":"); 
    var 
sep2 = tiempo.lastIndexOf(":"); 
    var 
hor = tiempo.substr(0, sep1); 
    var 
min = tiempo.substr(sep1 + 1, sep2 - sep1 - 1); 
    var 
sec = tiempo.substr(sep2 + 1); 
    return (
Number(sec) + (Number(min) * 60) + (Number(hor) * 3600)); 
   } 

   function 
secondsToTime(secs){ 
    var 
hor = Math.floor(secs / 3600); 
    var 
min = Math.floor((secs - (hor * 3600)) / 60); 
    var 
sec = secs - (hor * 3600) - (min * 60); 
    return 
padNmb(hor, 2) + ":" + padNmb(min, 2) + ":" + padNmb(sec, 2); 
   } 

   function 
substractTimes(t1, t2){ 
    var 
secs1 = stringToSeconds(t1); 
    var 
secs2 = stringToSeconds(t2); 
    var 
secsDif = secs1 - secs2; 
    return 
secondsToTime(secsDif); 
   } 

   function 
calcT3(){ 
    
with (document.frm) 
     
t3.value = substractTimes(t2.value, t1.value); 
   } 
validar_fecha.js
Código PHP:
   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 == "-")); 
    
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 == 2) || (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(); 
     } 
    } 
   } 
Espero alguien generoso lo pueda verificar y aconsejarme,pues es de lo primerito que hago con javascript !!!
Muy Amables !!!
__________________
:) Fernando Dichiera (:
[email protected]