Avatar billede tommyv Nybegynder
04. maj 2000 - 21:10 Der er 4 kommentarer og
1 løsning

Aldersberegning

Jeg har følgende JavaScript på min hjemmeside, der skulle kunne udregne en persons alder ud fra fødselsdatoen. Efter årtusindeskiftet virker det dog desværre ikke så godt. Hvis man bruger det i Explorer vil jeg blive 30 om godt og vel 693.852 dage, mens jeg i Netscape er -1871 år.

Er der nogen der kan sige mig hvad der skal ændres??

Her er scriptet:

<script language="JavaScript"><!--
// Original: Glub, Un-Inc. -->

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

<!-- Begin
var mm = prompt('What month were you born in?','1-12');
var bday = prompt('What day were you born on?','1-31');
var byear = prompt('What year were you born in?','1975');
var year = new Date();
var year2 = year.getYear();
var year3 = year2 + 1900;
thedate = new Date();
mm2 = thedate.getMonth() + 1;
dd2 = thedate.getDate();
yy2 = thedate.getYear();
if (yy2 < 100) yy2 += 1900
yourage = yy2 - byear;
if (mm2 < mm) yourage--;
if ((mm2 == mm) && (dd2 < bday)) yourage--;
TMonth = new Array(
'January','February','March',
'April','May','June','July',
'August','September','October',
'November','December'
);
CurMonth = mm - 1;
bmonth = TMonth[CurMonth];
var age2 = yourage + 1;
var timerID;
var timerRunning = false;
var today = new Date();
var startday = new Date();
var enday = new Date();
var secPerDay = 0;
var minPerDay = 0;
var hourPerDay = 0;
var secsLeft = 0;
var secsRound = 0;
var secsRemain = 0;
var minLeft = 0;
var minRound = 0;
var minRemain = 0;
var timeRemain = 0;
function stopclock() {
if(timerRunning)
clearTimeout(timerID);
timerRunning = false;
}
function startclock() {
stopclock();
showtime();
showtime1();
}
function showtime() {
today = new Date();
enday = new Date(""+bmonth+", "+bday+" "+year3+" 00:00");
enday.setYear(""+year3+"");
secsPerDay = 1000 ;
minPerDay = 60 * 1000 ;
hoursPerDay = 60 * 60 * 1000;
PerDay = 24 * 60 * 60 * 1000;
secsLeft = (enday.getTime() - today.getTime()) / minPerDay;
secsRound = Math.round(secsLeft);
secsRemain = secsLeft - secsRound;
secsRemain = (secsRemain < 0) ? secsRemain = 60 - ((secsRound - secsLeft) * 60) : secsRemain = (secsLeft - secsRound) * 60;
secsRemain = Math.round(secsRemain);
minLeft = ((enday.getTime() - today.getTime()) / hoursPerDay);
minRound = Math.round(minLeft);
minRemain = minLeft - minRound;
minRemain = (minRemain < 0) ? minRemain = 60 - ((minRound - minLeft) * 60) : minRemain = ((minLeft - minRound) * 60);
minRemain = Math.round(minRemain - 0.495);
hoursLeft = ((enday.getTime() - today.getTime()) / PerDay);
hoursRound = Math.round(hoursLeft);
hoursRemain = hoursLeft - hoursRound;
hoursRemain = (hoursRemain < 0) ? hoursRemain = 24 - ((hoursRound - hoursLeft) * 24) : hoursRemain = ((hoursLeft - hoursRound) * 24);
hoursRemain = Math.round(hoursRemain - 0.5);
daysLeft = ((enday.getTime() - today.getTime()) / PerDay);
daysLeft = (daysLeft - 0.5);
daysRound = Math.round(daysLeft);
daysRemain = daysRound;
if (daysRemain == 1) day_rem = " day, "
else day_rem = " days, "
if (hoursRemain == 1) hour_rem = " hour, "
else hour_rem = " hours, "
if (minRemain == 1) min_rem = " minute, "
else min_rem = " minutes, "
if (secsRemain == 1) sec_rem = " second"
else sec_rem = " seconds"
timeRemain = daysRemain + day_rem + hoursRemain + hour_rem + minRemain + min_rem + secsRemain + sec_rem;
document.down.face.value = timeRemain;
timerID = setTimeout("showtime()",1000);
timerRunning = true;
if (daysRemain < 0) year3 = year3 + 1
}
function showtime1() {
startday = new Date(""+bmonth+" "+bday+", "+byear+" 00:00 EDT");
startday.setYear(""+byear+"");
today = new Date();
secsPerDay = 1000 ;
minPerDay = 60 * 1000 ;
hoursPerDay = 60 * 60 * 1000;
PerDay = 24 * 60 * 60 * 1000;
secsLeft = (today.getTime() - startday.getTime()) / minPerDay;
secsRound = Math.round(secsLeft);
secsRemain = secsLeft - secsRound;
secsRemain = (secsRemain < 0) ? secsRemain = 60 - ((secsRound - secsLeft) * 60) : secsRemain = (secsLeft - secsRound) * 60;
secsRemain = Math.round(secsRemain);
minLeft = ((today.getTime() - startday.getTime()) / hoursPerDay);
minRound = Math.round(minLeft);
minRemain = minLeft - minRound;
minRemain = (minRemain < 0) ? minRemain = 60 - ((minRound - minLeft) * 60) : minRemain = ((minLeft - minRound) * 60);
minRemain = Math.round(minRemain - 0.495);
hoursLeft = ((today.getTime() - startday.getTime()) / PerDay);
hoursRound = Math.round(hoursLeft);
hoursRemain = hoursLeft - hoursRound;
hoursRemain = (hoursRemain < 0) ? hoursRemain = 24 - ((hoursRound - hoursLeft) * 24) : hoursRemain = ((hoursLeft - hoursRound) * 24);
hoursRemain = Math.round(hoursRemain - 0.5);
daysLeft = ((today.getTime() - startday.getTime()) / PerDay);
daysLeft = (daysLeft - 0.5);
daysRound = Math.round(daysLeft);
daysRemain = daysRound;
if (daysRemain == 1) day_rem = " day, "
else day_rem = " days, "
if (hoursRemain == 1) hour_rem = " hour, "
else hour_rem = " hours, "
if (minRemain == 1) min_rem = " minute, "
else min_rem = " minutes, "
if (secsRemain == 1) sec_rem = " second"
else sec_rem = " seconds"
timeRemain = daysRemain + day_rem + hoursRemain + hour_rem + minRemain + min_rem + secsRemain + sec_rem;
document.up.face.value = timeRemain;
timerID = setTimeout("showtime1()",1000);
timerRunning = true;
}
// End
// --></script>


Det kan også findes på http://welcome.to/tommyv under små programmer.
Avatar billede erikjacobsen Ekspert
04. maj 2000 - 21:21 #1
Alle steder, hvor du skriver noget i retning af

  if (yy2 < 100) yy2 += 1900

skal du i stedet for skrive

  if (yy2 < 1000) yy2 += 1900

Ok, så virker det nok i mindst. 900 år. Er det nok?
Avatar billede tommyv Nybegynder
04. maj 2000 - 22:08 #2
Det virker i Netscape, men ikke i Explorer. Hvorfor ikke?

Er der andre løsningsmuligheder
Avatar billede erikjacobsen Ekspert
04. maj 2000 - 22:23 #3
Jeg kan se, at du ikke er konsekvent. Alle aflæsninger af getYear skal
en tur gennem møllen, så dine to liiner med:

var year2 = year.getYear();
var year3 = year2 + 1900;

skal altså også have den der "if" med de 1000 omkring. Problemet er at
år 2000 både kan afleveres som 2000 og som 100.

Så klø på, og find alle dine aflæsninger af året (hehe - jeg gider ikke).
Avatar billede tommyv Nybegynder
04. maj 2000 - 23:03 #4
Jeg har kun de 2 linier det ene sted, men hvor skal if-sætningen tilføjes?

Du må undskylde, jeg er ikke så god til programmering :)
Avatar billede erikjacobsen Ekspert
04. maj 2000 - 23:15 #5
Nu har du fået at vide, hvad der i vejen. Jeg gider ikke kigge dit
program igennem, for jeg får hovedpine af at se et program, hvor
der ikke er antydning af indrykning til at vise strukturen.

Hvis du nu gjorde dig den ulejlighed at lave denne indrykning,
skrive nogle kommentarer om hvad du gør, finde på nogle bedre
navne til dine variabler - ved du hvad så ? Så er du måske
alligevel ganske god til programmering!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester