no me funcionan fechas en firefox

Crear páginas para Gecko, diferencias con IE, articulos de interés y recursos en español
angeles

no me funcionan fechas en firefox

Mensajepor angeles » Lun Ago 27, 2007 10:14 am

He realizado un formulario en IE para que escriba las fechas y las reste, pero en firefox no me funciona. Alguien me podría ayudar: aquí dejo el código. El problema es que no me escribe las fechas dice que undefined.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link href="estilo.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
<!--
function makedate()
{
document.frm.fecha0.value = document.frm.day.options.value + "/" + document.frm.month.options.value + "/" + document.frm.year.options.value;
}
//-->
</script>

<script type="text/javascript">
<!--
function makedate1()
{
document.frm.fecha1.value = document.frm.day1.options.value + "/" + document.frm.month1.options.value + "/" + document.frm.year1.options.value;
}
//-->
</script>


<script language="JavaScript">
function cerosIzq(sVal, nPos){
var sRes = sVal;
for (var i = sVal.length; i < nPos; i++)
sRes = "0" + sRes;
return sRes;
}

function armaFecha(nDia, nMes, nAno){
var sRes = cerosIzq(String(nDia), 2);
sRes = sRes + "/" + cerosIzq(String(nMes), 2);
sRes = sRes + "/" + cerosIzq(String(nAno), 4);
return sRes;
}

function sumaMes(nDia, nMes, nAno, nSum){
if (nSum >= 0){
for (var i = 0; i < Math.abs(nSum); i++){
if (nMes == 12){
nMes = 1;
nAno += 1;
} else nMes += 1;
}
} else {
for (var i = 0; i < Math.abs(nSum); i++){
if (nMes == 1){
nMes = 12;
nAno -= 1;
} else nMes -= 1;
}
}
return armaFecha(nDia, nMes, nAno);
}

function esBisiesto(nAno){
var bRes = true;
res = bRes && (nAno % 4 == 0);
res = bRes && (nAno % 100 != 0);
res = bRes || (nAno % 400 == 0);
return bRes;
}

function finMes(nMes, nAno){
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) && esBisiesto(nAno))? 1: 0);
}

function diasDelAno(nAno){
var nRes = 365;
if (esBisiesto(nAno)) nRes++;
return nRes;
}

function anosEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
{
var nRes = Math.max(0, nAn1 - nAn0 - 1);
if (nAn1 != nAn0)
if ((nMe1 > nMe0) || ((nMe1 == nMe0) && (nDi1 >= nDi0)))
nRes++;
return nRes;
}

function mesesEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
{
var nRes;
if ((nMe1 < nMe0) || ((nMe1 == nMe0) && (nDi1 < nDi0))) nMe1 += 12;
nRes = Math.max(0, nMe1 - nMe0 - 1);
if ((nDi1 > nDi0) && (nMe1 != nMe0)) nRes++;
return nRes;
}

function diasEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
{
var nRes;
if (nDi1 < nDi0) nDi1 += finMes(nMe0, nAn0);
nRes = Math.max(0, nDi1 - nDi0);
return nRes;
}

function mayorOIgual(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
{
var bRes = false;
bRes = bRes || (nAn1 > nAn0);
bRes = bRes || ((nAn1 == nAn0) && (nMe1 > nMe0));
bRes = bRes || ((nAn1 == nAn0) && (nMe1 == nMe0) && (nDi1 >= nDi0));
return bRes;
}

function calcula()
{
var sFc0 = document.frm.fecha0.value; // Se asume válida
var sFc1 = document.frm.fecha1.value; // Se asume válida
var nDi0 = parseInt(sFc0.substr(0, 2), 10);
var nMe0 = parseInt(sFc0.substr(3, 2), 10);
var nAn0 = parseInt(sFc0.substr(6, 4), 10);
var nDi1 = parseInt(sFc1.substr(0, 2), 10);
var nMe1 = parseInt(sFc1.substr(3, 2), 10);
var nAn1 = parseInt(sFc1.substr(6, 4), 10);
if (mayorOIgual(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1))
{
var nAno = anosEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
var nMes = mesesEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
var nDia = diasEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
var nTtM = nAno * 12 + nMes;
var nTtD = nDia;
for (var i = nAn0; i < nAn0 + nAno; i++) nTtD += diasDelAno(nAno);
for (var j = nMe0; j < nMe0 + nMes; j++) nTtD += finMes(j, nAn1);
var nTSS = Math.floor(nTtD / 7);
var nTSD = nTtD % 7;

document.frm.nnoches.value = String(nTtD) + " días";

} else alert("La fecha de llegada es anterior a la fecha de salida");
}
</script>
</head>
<body>

<Form method="POST" name="frm" action="http://cgi.ceinalon.com/FormMail.pl">
<input type="hidden" name="recipient" value="laseronda@parquederedes.com">
<input type="hidden" name="subject" value="RESERVAS PAGINA WEB">
<input type="hidden" name="redirect" value="http://www.parquederedes.com/gracias.htm">
<input type="hidden" name="required" value="Nombre,Telefono,email,fecha0,fecha1,huespedes">
<table border="0">
<tr>

<td>
<table width="778" border="0">
<tr>
<td colspan="4" align="right">&nbsp;</td>
</tr>
<tr>
<td align="right"><div align="right" class="texto1">Nombre y apellidos</div></td>
<td colspan="2" align="left"><input name="Nombre" type="text" class="caja1" id="Nombre" size="41"></td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right"><div align="right" class="texto1">Tel&eacute;fono de contacto</div></td>
<td width="197" align="left"><input type="text" name="Telefono" size="12" class="caja1"> </td>
<td width="80" align="right" class="texto1">E-mail </td>
<td><input type="text" name="email" size="35" class="caja1" /></td>
</tr>
<tr>
<td width="247" align="right" class="texto1">Fecha de entrada(dd/mm/aaaa) </td>
<td colspan="2" align="right"><span class="texto1">Dia:
</span>
<select name="day" class="caja1" onChange="makedate()">
<option value="01" selected>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>
</select>
<span class="texto1">Mes: </span>
<select name="month" class="caja1" onChange="makedate()">
<option value="01" selected>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>
</select>
<span class="texto1">Año:</span> <select name="year" class="caja1" onChange="makedate()">
<option value="2007" selected>2007</option>
<option value="2008" >2008</option>
</select></td>
<td width="236">
<input name="fecha0" type="text" class="caja1" value="01/01/2007"> </td>
</tr>
<tr>
<td align="right" class="texto1">Fecha de salida(dd/mm/aaaa) </td>
<td colspan="2" align="right"><span class="texto1">Dia:
</span>
<select name="day1" class="caja1" onchange="makedate1()">
<option value="01" selected="selected">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>
</select>
<span class="texto1">Mes: </span>
<select name="month1" class="caja1" onchange="makedate1()">
<option value="01" selected="selected">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>
</select>
<span class="texto1">A&ntilde;o: </span> <select name="year1" class="caja1" onchange="makedate1()">
<option value="2007" selected="selected">2007</option>
<option value="2008" >2008</option>
</select></td>
<td>
<input name="fecha1" type="text" class="caja1" value="01/01/2007"> </td>
</tr>
<tr>
<td align="right">&nbsp;</td>
<td colspan="2" align="right" class="texto1">N&uacute;mero de noches </td>
<td>
<input name="nnoches" type="text" class="caja1" onclick="calcula()" value="0"readonly> </td>
</tr>
<tr>
<td rowspan="2" align="right"><strong><br />
</strong></td>
<td height="22" colspan="2" align="right"><div align="right" class="texto1">N&ordm; de hu&eacute;spedes</div></td>
<td><input name="huespedes" type="text" class="caja1" id="huespedes" size="2"></td>
</tr>
<tr>
<td colspan="2" align="right" class="texto1"><p>Observaciones</p>
<p><span class="TEXTO">Al
pulsar el bot&oacute;n &quot;Enviar&quot;<br />
acepta nuestra <a href="politicadatos.htm" target="_blank">pol&iacute;tica
de protecci&oacute;n de datos</a> </span></p>
<p><span class="TEXTO">
<input type="submit" name="Submit" value="Enviar" class="boton" />
</span><span class="TEXTO">
<input type="reset" name="Reset" value="Borrar" class="boton" />
</span></p></td>
<td><textarea name="comentarios" class="caja1" cols="27" rows="9"></textarea></td>
</tr>
<tr>
<td colspan="4" align="right">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>
Alquien me podría ayudar.

Un saludo
gracias

Gerardo H.

Respuesta

Mensajepor Gerardo H. » Lun Dic 03, 2007 9:46 am

Hola, bueno se que ya alguien de seguro resolvió este tema pero aqui no esta publicado, de todas formas, dejo una solución para cuando sea necesario, el problema esta en que al ir evolucionando Javascript e ir integrando mas y mas funcionalidades, las formas de realizar las cosas se vuelven mas metódicas, en este caso el problema esta en que hay que cachar los indices de el SELECT, la función correcta para Explorer y Firefox sería como sigue:

<script type="text/javascript">
<!--
function makedate1()
{
document.form1.CAMPORECEPTOR.value = document.form1.SELECT1.options[document.form1.SELECT1.selectedIndex].value + "-" + document.form1.SELECT2.options[document.form1.SELECT2.selectedIndex].value + "-" + document.form1.SELECT3.options[document.form1.SELECT3.selectedIndex].value;
}
//-->
</script>

En este caso yo use "-" como separador entre caracteres, pero se puede usar cualquier símbolo, sin embargo si se quiere estandarizar fechas o algo para una base de datos lo correcto sería utilizar el "-"


Volver a “Desarrollo web (HTML/CSS/JS, accesibilidad...)”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado