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 !!!