Foros del Web » Programando para Internet » Javascript »

Error cálculo javascript

Estas en el tema de Error cálculo javascript en el foro de Javascript en Foros del Web. Hola, tengo un código JS de una calculadora de edad, pero al calcular el día de la semana en que nací lo da incorrecto, ej: ...
  #1 (permalink)  
Antiguo 30/07/2011, 13:17
 
Fecha de Ingreso: junio-2011
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Error cálculo javascript

Hola, tengo un código JS de una calculadora de edad, pero al calcular el día de la semana en que nací lo da incorrecto, ej: nací un viernes, y la calculadora dice que fue miércoles, ya lo verifiqué en varias calculadoras y calendarios y si nací un viernes.

La pregunta es cómo y dónde en el código se puede corregir ese error?

Será muy útil cualquier ayuda pues quiero poner la calculadora en mi web.
Muchas Gracias
  #2 (permalink)  
Antiguo 30/07/2011, 13:34
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Error cálculo javascript

te ha faltado un dato importante que no has mencionado. qué calendario estás usando?? gregoriano, hebreo, maya, chino, ...??
  #3 (permalink)  
Antiguo 30/07/2011, 13:56
 
Fecha de Ingreso: junio-2011
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Error cálculo javascript

el código lo bajé de una página en inglés, lo pongo a continuación tal y como está en la página, la verdad es que no sé casi nada de js, tal vez puedes encontrar el error.

Gracias
<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->

<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!-- Original: Dev Pragad ([email protected]) -->
<!-- Web Site: http://www.geocities.com/devpragad -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
function start() {
document.form1.day.value = "";
document.form1.month.value = "";
document.form1.year.value = "";
document.form1.age.value = "";
document.form1.months.value = "";
document.form1.weeks.value = "";
document.form1.answer.value = "";
document.form1.hours.value = "";
document.form1.min.value = "";
document.form1.sec.value = "";
document.form1.bday.value = "";
document.form1.milli.value = "";
}
function run() {
var ap;
dd = document.form1.day.value;
mm = document.form1.month.value;
yy = document.form1.year.value;
with(document.form1) {
ap = parseInt(ampm.selectedIndex);
hr = parseInt(hrs.value);
if(hr <= 0 && hr >= 13) {
ap = null;
alert("asdf")
}
}
main="valid";
if ((mm < 1) || (mm > 12) || (dd < 1) || (dd > 31) || (yy < 1) ||(mm == "") || (dd == "") || (yy == ""))
main = "Invalid";
else
if (((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)) && (dd > 30))
main = "Invalid";
else
if (mm == 2) {
if (dd > 29)
main = "Invalid";
else if((dd > 28) && (!lyear(yy)))
main="Invalid";
}
else
if((yy > 9999)||(yy < 0))
main = "Invalid";
else
main = main;
if(main == "valid") {
function leapyear(a) {
if(((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0))
return true;
else
return false;
}
days = new Date();
gdate = days.getDate();
gmonth = days.getMonth();
gyear = days.getYear();
age = gyear - yy;
if((mm == (gmonth + 1)) && (dd <= parseInt(gdate))) {
age = age;
}
else {
if(mm <= (gmonth)) {
age = age;
}
else {
age = age - 1;
}
}
if(age == 0)
age = age;
document.form1.age.value=" You are " + age+ " years old & ";
if(mm <= (gmonth + 1))
age = age - 1;
if((mm == (gmonth + 1)) && (dd > parseInt(gdate)))
age = age + 1;
var m;
var n;
if (mm == 12) { n = 31 - dd; }
if (mm == 11) { n = 61 - dd; }
if (mm == 10) { n = 92 - dd; }
if (mm == 9) { n = 122 - dd; }
if (mm == 8) { n = 153 - dd; }
if (mm == 7) { n = 184 - dd; }
if (mm == 6) { n = 214 - dd; }
if (mm == 5) { n = 245 - dd; }
if (mm == 4) { n = 275 - dd; }
if (mm == 3) { n = 306 - dd; }
if (mm == 2) { n = 334 - dd; if(leapyear(yy)) n = n + 1; }
if (mm == 1) { n = 365 - dd; if (leapyear(yy)) n = n + 1; }
if (gmonth == 1) m = 31;
if (gmonth == 2) { m = 59; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 3) { m = 90; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 4) { m = 120; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 5) { m = 151; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 6) { m = 181; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 7) { m = 212; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 8) { m = 243; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 9) { m = 273; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 10) { m = 304; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 11) { m = 334; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 12) { m = 365; if (leapyear(gyear)) m = m + 1; }
totdays = (parseInt(age) * 365);
totdays += age / 4;
totdays = parseInt(totdays) + gdate + m + n;
document.form1.answer.value = "" + totdays +" days ";
months = age * 12;
months += 12 - parseInt(mm);
months += gmonth;
document.form1.months.value = months + " Months";
if (gmonth == 1) p = 31 + gdate;
if (gmonth == 2) { p = 59 + gdate; if (leapyear(gyear)) m = m + 1; }
if (gmonth == 3) { p = 90 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 4) { p = 120 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 5) { p = 151 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 6) { p = 181 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 7) { p = 212 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 8) { p = 243 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 9) { p = 273 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 10) { p = 304 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 11) { p = 334 + gdate; if (leapyear(gyear)) p = p + 1; }
if (gmonth == 12) { p = 365 + gdate; if (leapyear(gyear)) p = p + 1; }
weeks = totdays / 7;
weeks += " weeks";
weeks = parseInt(weeks);
document.form1.weeks.value = weeks + " Weeks";
var time = new Date();
ghour = time.getHours();
gmin = time.getMinutes();
gsec = time.getSeconds();
hour = ((age * 365) + n + p) * 24;
hour += (parseInt(age / 4) * 24);
if(ap == 0)
hour = hour - hr;
else {
if(ap == 1) {
hour = hour - (11 + hr)
}
}
document.form1.hours.value = hour + " Hours";
var min;
min = (hour * 60) + gmin;
document.form1.min.value = min + " Minutes";
sec = (min * 60) + gsec;
document.form1.sec.value = sec + " Seconds";
var millisec;
var gmil;
gmil = days.getMilliseconds();
millisec = (sec * 1000) + gmil;
document.form1.milli.value = millisec + " Milliseconds";
mm = mm - 1;
var r;
if(mm == 0) r = 1;
if(mm == 1) r = 31;
if(mm == 2) { r = 59; if (leapyear(gyear)) m = m + 1; }
if(mm == 3) { r = 90; if (leapyear(gyear)) r = r + 1; }
if(mm == 4) { r = 120; if (leapyear(gyear)) r = r + 1; }
if(mm == 5) { r = 151; if (leapyear(gyear)) r = r + 1; }
if(mm == 6) { r = 181; if (leapyear(gyear)) r = r + 1; }
if(mm == 7) { r = 212; if (leapyear(gyear)) r = r + 1; }
if(mm == 8) { r = 243; if (leapyear(gyear)) r = r + 1; }
if(mm == 9) { r = 273; if (leapyear(gyear)) r = r + 1; }
if(mm == 10) { r = 304; if (leapyear(gyear)) r = r + 1; }
if(mm == 11) { r = 334; if (leapyear(gyear)) r = r + 1; }
if(mm == 12) { r = 365; if (leapyear(gyear)) r = r + 1; }
mm = mm + 1;
r = parseInt(r) + parseInt(dd);
if( mm > (gmonth + 1)) {
bday = r - m - gdate;
}
else {
if(mm == (gmonth + 1) && (gdate < dd)) {
bday = (r - m - gdate);
}
else {
if((leapyear(gyear)) && ((mm > 2) && (dd < 29))) {
a = 366;
}
else {
a = 365;
}
bday = a + (r - m - gdate);
}
}
nhour = 24-parseInt(ghour);
nmin = 60 - parseInt(gmin);
nsec = 60 - parseInt(gsec);
go();
if(((bday == 366) && (leapyear(yy))) || ((bday == 365) && (!leapyear(yy)))) {
document.form1.bday.value = "today is your birthday";
alert("Happy Birthday");
} else {
document.form1.bday.value = bday + " days " + nhour + " hours " + nmin + " minutes " + nsec + " seconds";
setTimeout("run()", 1);
}
function go() {
function lyear(a) {
if(((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0)) return true;
else return false;
}
mm = parseInt(mm);
dd = parseInt(dd);
yy = parseInt(yy);
if ((mm < 1) || (mm > 12) || (dd < 1) || (dd > 31) || (yy < 1) ||(mm == " ") || (dd == " ") || (yy == " ")) main="Invalid";
else
if (((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)) && (dd > 30)) main = "Invalid";
else
if (mm == 2) {
if (dd > 29)
main = "Invalid";
else
if(( dd > 28) && (!lyear(yy)))
main = "Invalid";
}
else main = main;
if(main == "valid") {
var m;
if (mm == 1) n = 31;
if (mm == 2) n = 59 + 1;
if (mm == 3) n = 90 + 1;
if (mm == 4) n = 120 + 1;
if (mm == 5) n = 151 + 1;
if (mm == 6) n = 181 + 1;
if (mm == 7) n = 212 + 1;
if (mm == 8) n = 243 + 1;
if (mm == 9) n = 273 + 1;
if (mm == 10) n = 304 + 1;
if (mm == 11) n = 334 + 1;
if (mm == 12) n = 365 + 1;
if((mm == 1)||(mm == 3)||(mm == 5)||(mm == 7)||(mm == 8)||(mm == 10)||(mm == 12))
n += 31 + dd;
else if((mm == 4)||(mm == 6)||(mm == 9)||(mm == 11))
n += 31 + dd + 1;
else if(mm == 2) {
if(lyear(yy)) n += 29 + dd - 3;
else if(!lyear(yy)) n += 28 + dd - 1;
}
fours = yy / 4;
hunds = yy / 100;
fhunds = yy / 400;
var day;
day = (yy + n + fours - hunds + fhunds) % 7;
day = parseInt(day)
switch(day)
{
case 1 : document.form1.age.value +=" you were born on a Sunday"
break
case 2 : document.form1.age.value +=" you were born on a Monday"
break
case 3 : document.form1.age.value +=" you were born on a Tuesday"
break
case 4 : document.form1.age.value +=" you were born on a Wednesday"
break
case 5 : document.form1.age.value +=" you were born on a Thursday"
break
case 6 : document.form1.age.value +=" you were born on a Friday"
break
case 7 : document.form1.age.value +=" you were born on a Saturday"
break
case 0 : document.form1.age.value +=" you were born on a Saturday"
break
}
}
else {
document.form1.age.value += main + " Date";
}
}
}
else {
document.form1.age.value = main + " Date";
document.form1.months.value = "";
document.form1.weeks.value = "";
document.form1.answer.value = "";
document.form1.hours.value = "";
document.form1.min.value = "";
document.form1.sec.value = "";
document.form1.bday.value = "";
document.form1.milli.value = "";
}
}
// End -->
</script>

</HEAD>
  #4 (permalink)  
Antiguo 30/07/2011, 13:57
 
Fecha de Ingreso: junio-2011
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Error cálculo javascript

continúa.....
<!-- STEP TWO: Insert the onLoad event handler into your BODY tag -->

<BODY onLoad="start()">

<!-- STEP THREE: Copy this code into the BODY of your HTML document -->

<CENTER>
<br>
Enter your date of birth
<br>
<FORM name=form1>
Month<INPUT name=month size=3>
Date<INPUT name=day size=3>
Year<INPUT name=year size=6>
Hours<INPUT name=hrs value=00 size=6>
<select size="1" name="ampm">
<option selected>AM</option>
<option>PM</option>
</select>
<INPUT name=start onclick=run() type=button value="Calculate">
<BR>
<BR>
<INPUT name=age size=55 value="Your age will be displayed here">
<BR>
<BR>
You have been living for:
<BR>
<TABLE border = 0>
<TBODY>
<TR>
<TD>In months:</TD>
<TD><INPUT name=months size=30></TD>
</TR>
<TR>
<TD>In weeks:</TD>
<TD><INPUT name=weeks size=30></TD>
</TR>
<TR>
<TD>In days:</TD>
<TD><INPUT name=answer size=30></TD>
</TR>
<TR>
<TD>In hours:</TD>
<TD><INPUT name=hours size=30></TD>
</TR>
<TR>
<TD>In minutes:</TD>
<TD><INPUT name=min size=30></TD>
</TR>
<TR>
<TD>In seconds:</TD>
<TD><INPUT name=sec size=30></TD>
</TR>
<TR>
<TD>In Milliseconds:</TD>
<TD><INPUT name=milli size=30></TD>
</TR>
</TBODY>
</TABLE>
Your next birthday will be in:
<BR>
<INPUT name=bday size=40>
</FORM>
</CENTER>

<p><center>
<font face="arial, helvetica" size"-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<!-- Script Size: 10.86 KB -->
  #5 (permalink)  
Antiguo 31/07/2011, 17:32
 
Fecha de Ingreso: junio-2011
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Error cálculo javascript

que alguien me ayude por favor, es importante. Se lo agradezco
  #6 (permalink)  
Antiguo 31/07/2011, 19:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Error cálculo javascript

Hola:

Siempre es lo mismo... ¿?

Donde tengas getYear(), cámbialó por getFullYear()...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: js
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




La zona horaria es GMT -6. Ahora son las 20:04.