Forum Moderators: open

Message Too Old, No Replies

Need JavaScript calculator for Kids

When will they be able to vote?

         

rainydazed

5:21 am on Sep 19, 2005 (gmt 0)

10+ Year Member



Hi, I'm terrible with the math and no good at writing my own javascript, can somebody steer me to a script whereby a person can enter their date of birth and find out exactly how long it will be (in years, months, days, etc) until they will be old enough to vote?

Here's a script that shows you how old you are, can it be modified somehow? This would make a good public service script. It might also make for an interesting "How long 'till I can get into to a bar" script or a "How long 'till I can collect Social Security" script. Sorry if it is inapporpriate to post the whole script here, but here it is if anyone can help. Gracias.

This goes in the <head>

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

This goes in the <body>

<CENTER>
<br>
<font size="4" face="Arial" color="#000080">Find out how old you are right down
to the millisecond</font>
</CENTER>

<CENTER>
<FORM name=form1>
<p><b><font face="Arial" size="3">Enter your date of birth<br>
</font></b><font face="Arial" size="3"><b>Month&nbsp; <INPUT name=month size=3>
Date&nbsp; <INPUT name=day size=3>
Year&nbsp; <INPUT name=year size=6 value="yyyy"> Time <INPUT name=hrs value=0: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">
</b></font></p>
<TABLE border = 0>
<TBODY>
<TR>
<TD colspan="2">
<p align="center"><font face="Arial" size="3"><b>
You have been living for:</b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Months:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=months size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Weeks:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=weeks size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Days:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=answer size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Hours:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=hours size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Minutes:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=min size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3">Seconds:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=sec size=30></b></font></TD>
</TR>
<TR>
<TD align="right"><font face="Arial" size="3"> Milliseconds:</font></TD>
<TD><font face="Arial" size="3"><b><INPUT name=milli size=30></b></font></TD>
</TR>
</TBODY>
</TABLE>
<font face="Arial" size="3"><b>
Your next birthday will be in:
<BR>
<INPUT name=bday size=40>
</b></font>
</FORM>
</CENTER>

[edited by: jatar_k at 4:02 pm (utc) on Sep. 19, 2005]
[edit reason] removed url and email [/edit]

garann

9:05 pm on Sep 19, 2005 (gmt 0)

10+ Year Member



It seems easier to add the age they need to be to vote/drink/retire/etc. to their birthday and get the difference. This is what I'd do...


var ageToReach = 18;
function checkAge(birthDate) {
var bDay = new Date(birthDate);
var goalDate = bDay.setFullYear(bDay.getFullYear + ageToReach);
var now = new Date();
if (goalDate < now) {
alert("You're old enough now - congratulations!");
return true;
}
var diff = new Date(goalDate - now);
document.getElementById("year").value = diff.getFullYear() - 1970;
document.getElementById("month").value = diff.getMonth();
document.getElementById("day").value = diff.getDate();
document.getElementById("hour").value = diff.getHours();
document.getElementById("minute").value = diff.getMinutes();
document.getElementById("second").value = diff.getSeconds();
document.getElementById("millis").value = diff.getMilliseconds();
}
...
Years: <input type="text" id="year" value="">
Months: <input type="text" id="month" value="">
Days: <input type="text" id="day" value="">
Hours: <input type="text" id="hour" value="">
Minutes: <input type="text" id="minute" value="">
Seconds: <input type="text" id="second" value="">
Milliseconds: <input type="text" id="millis" value="">

I only tested the general idea behind that, not the code itself, but it should work...