30. september 2001 - 13:32Der er
17 kommentarer og 1 løsning
Hjælp mig please(datoprogram)
Hej jeg er ved at lave et script som kan finde ud af hvor mange dage der er til ens fødselsdag. Men jeg kan ik rigtigt få skidtet til at virke. Når jeg printer resultatet ud står der NaN(NotaNumber)i vinduet. JEg har efterhånden prøvet ALT og jeg fatter simpelthen ikke hvad der er galt. Jeg vil være utrolig taknemlig hvis der er en der kan fortælle mig hvad der er galt med denne kode. Tak P.S. kommentarene er nogle jeg lige har skrevet, så det er ik dem der er problemet.
<html> <head> <script LANGUAGE=\"javascript\">
var fdato=window.prompt(\"Indtast fødselsdato her(dd/mm/åååå)\");
mdr=new Array(12);//arrayet indeholder info om antal dage i måneden mdr[00]=parseInt(31); mdr[01]=parseInt(28); mdr[02]=parseInt(31); mdr[03]=parseInt(30); mdr[04]=parseInt(31); mdr[05]=parseInt(30); mdr[06]=parseInt(31); mdr[07]=parseInt(31); mdr[08]=parseInt(30); mdr[09]=parseInt(31); mdr[10]=parseInt(30); mdr[11]=parseInt(31);
var fdag=parseInt(fdato.substring(0,2)); var fmd=parseInt(fdato.substring(2,4)); var faar=parseInt(fdato.substring(4,8));
nudato=new Date();
var nudag=nudato.getDate(); var numd=nudato.getMonth(); var nuaar=nudato.getFullYear();
var antaldage;
//denne bliver kaldt hvis den aktuelle md. er større end ens føsdagmåned function efter() { var aktueldag=0;
for (i=(numd+1);i<=12;i++) { aktueldag=(aktueldag+mdr[i]); } for (j=0;j<fmd;j++) { aktueldag=(aktueldag+mdr[j]); } aktueldag=(aktueldag+((mdr[numd]-nudag)+fdag)); return aktueldag; }
//denne funk hvis den er aktuelle md. er mindre end føsdagmd. function foer() { var aktueldag=0; for (k=(numd+1);k<fmd;k++) { aktueldag=(aktueldag+mdr[k]); } aktueldag=(aktueldag+((mdr[numd]-nudag)+fdag)); return aktueldag; }
Udfordringerne hober sig op i fødevare- og drikkevareindustrien og gør den til en af de mest sårbare.
24. oktober 2024
Slettet bruger
30. september 2001 - 13:39#1
Du har en fejl i dine parseInt()\'s: var fdag=parseInt(fdato.substring(0,2)); var fmd=parseInt(fdato.substring(2,4)); var faar=parseInt(fdato.substring(4,8)); Skal ændres til: var fdag=parseInt(fdato.substring(0,2)); var fmd=parseInt(fdato.substring(3,5)); var faar=parseInt(fdato.substring(6,10)); ...i dit tilfælde!
Synes godt om
Slettet bruger
30. september 2001 - 13:41#2
I dit script (hvis man undlod parseInt()-kommandoerne) ville variablerne blive udfyldt med: fdag = \"30\"; fmd = \"/1\"; faar = \"0/20\"; ... ved datoen d. 30/10/2001 ! :-)
Hejsa Det er ofte at parse-operationer driller. Du kan nemt kontrollere at du får det du gerne vil have ved at lave en lille designalert:
var fdag=parseInt(fdato.substring(0,2)); var fmd=parseInt(fdato.substring(3,5)); var faar=parseInt(fdato.substring(6,10)); alert(fdag+\" | \"+fmd+\" | \"+faar);
Her vil du se at nu bliver daoen formatteret og opdelt korrekt Huskk og fjern den -før du afleverer opgaven på skolen... ;)
Tak for de gode råd indtil videre, men jeg tror ikke i forstod hvad jeg mente. Tallene fad,fmd,nudag osv. Altså alle datotallene, de virker fint nok hver for sig. Men i det samme jeg behandler tallene i mine to funktioner går der noget galt. Jeg snakker om disse funktioner :
function efter() { var aktueldag=0;
for (i=(numd+1);i<=12;i++) { aktueldag=(aktueldag+mdr[i]); } for (j=0;j<fmd;j++) { aktueldag=(aktueldag+mdr[j]); } aktueldag=(aktueldag+((mdr[numd]-nudag)+fdag)); return aktueldag; }
function foer() { var aktueldag=0; for (k=(numd+1);k<fmd;k++) { aktueldag=(aktueldag+mdr[k]); } aktueldag=(aktueldag+((mdr[numd]-nudag)+fdag)); return aktueldag;
Jeg kan altså som sagt sagtens lægge dato tallene sammen og udskrive dem osv hvis jeg ikke har disse to funktioner med. Men i det samme jeg lader tallene behandle i en af disse funktioner, går det galt. Så det er altså et eller andet sted i disse funktioner fejlen ligger. Men jeg kan simpelthen ikke finde ud af hvor. P.S. Det er forresten ikke en skoleopg. Det er en jeg har defineret til mig selv :)
Synes godt om
Slettet bruger
30. september 2001 - 16:48#7
Udskift de tre parseInt()-sætninger med:
var fdag=parseInt(fdato.substring(0,2)); var fmd=parseInt(fdato.substring(3,5)); var faar=parseInt(fdato.substring(6,10)); if (fdato.charAt(0) == \"0\") fmd = parseInt(fdato.charAt(1)); if (fdato.charAt(3) == \"0\") fmd = parseInt(fdato.charAt(4));
Synes godt om
Slettet bruger
30. september 2001 - 16:49#8
Nu returner de i hvert fald det rigtige resultat, men det ser ud som om, der er et eller andet galt i dit script...
Synes godt om
Slettet bruger
30. september 2001 - 16:50#9
Ups, så ikke dit indlæg, ninjadims!
Synes godt om
Slettet bruger
30. september 2001 - 16:51#10
Når jeg kører dit script med datoen d. 03/09/1987 (en vis hunds fødselsdag!) og med parseInt()-rettelserne, så udskriver den på skærmen: 3 Men der kommer ingen fejlmeddelese...
<ole> Prøv at alert\'e dine tal, inden du behandler dem...det kan som regel afsløre fejlen. Begynd i toppen af de funktioner, der giver dig problemer. Skriv så f.eks:
Læg så mærke til to ting, når alert\'en kommer frem: 1. Er der en fejl-ikon i din statusbar? Hvis \'ja\', så ér fejlen allerede indtrådt - før linien med alert\'en. 2. Ser de alert\'ede værdier \'fornuftige ud\'?
Hvis alt er OK, flytter du alert\'en ned til næste sted, hvor du foretager dig noget med genererede værdier og tester dem.....osv. /mvh </bole>
Når du laver parseint på streng hvor der kan være foranstillede nuller kan det nemt gå galt.
dennem måend er fx den 9\'ende i året så du laver parseInt( \'09\' ); grunden er at funktionen kikker på første ciffer og hvis det er et 0 tror den taller er i ottetalssystemet. (hvor 9 slet ikke er et ciffer).
Du må udtrykkeligt fortælle funktionen at det tal der skal læses er et decimalt tal. Det gøres ved at give en extra parameter med der er 10: var fdag=parseInt( fdato.substring(0,2), 10 ); var fmd=parseInt( fdato.substring(3,5), 10 ); var faar=parseInt( fdato.substring(6,10), 10 );
Egentlig unødvendigt ved årstallet, men det skader aldrig.
idet du initierer dit mdr array siger du mdr[00]=parseInt(31); den parseInt skader ikke, men den er totalt spild af tid det med at skrive 2 nuller for at slå op er farligt. især i linierne: mdr[08]=parseInt(30); mdr[09]=parseInt(31); af samme grund som ovenfor.
skriv istedet: mdr[ 0]=31; ... mdr[ 8]=30; mdr[ 9]=31; det er hurtigere og sikrere.
1) du skal trække 1 fra den indtastede måned så månedsnummeret svarer til nummereringen i dine Date objekter ( 0==januar,... 11==december )
2) i første for-løkke i funktionen efter() havde du en forkert betingelse. du testede 12>=i og det lighedstegn lod i blive 12, men mdr arrayets højeste index er 11.
jeg har rettet begge fejl i koden hernedenfor. og det virker sågar.
var fdag=parseInt( fdato.substring( 0,2 ), 10 ); var fmd =parseInt( fdato.substring( 3,5 ), 10 ) -1; // RETTET LINIE var faar=parseInt( fdato.substring( 6,10 ), 10 ); alert( \">\"+fdato +\" \"+fdag+\" \"+fmd+\" \"+faar );
nudato=new Date();
var nudag=nudato.getDate(); var numd=nudato.getMonth(); var nuaar=nudato.getFullYear();
var antaldage;
//denne bliver kaldt hvis den aktuelle md. er større end ens føsdagmåned function efter() { // fjernet +1 i første loop var aktueldag=0; for ( i=numd+1; 12>i; i++ ) { // fra nu til nytår RETTET LINIE aktueldag = aktueldag+mdr[i]; } for ( j=0; fmd>j; j++ ) { // fra nytår til fødemåned aktueldag = aktueldag+mdr[j]; } aktueldag= aktueldag +mdr[numd] -nudag +fdag; return aktueldag; }
glemte noget før ellersiden får du en løkke som driller Pas på med at bruge alert metoden i løkker! Antal step skal holdes LAVT for du kan ikke forlade et skript som alerter inde i en løkke. Du sidder fast for du kan ikke lukke en alert (er modal) Det er en sur ting at miste et skript fordi man er nødt til at boote (lignede en skoleopgave.. ;D ) mvh a.
<ole> Jeg har lavet i om ikke hundredevis, så snesevis af bummerter med en test-alert i en uendelig løkke. Det er da aldrig endt i en reboot - blot tryk Ctrl+Alt+Delete :) /mvh </bole>
Hehe...ja, vi har vel alle vores egne :) Jeg har lavet en \'myAlert()\' i en .js-fil. Den åbner et vindue med test-strengen, da jeg tit sidder med laaaaaange strenge, der skal skrives ud, dynamisk. En alert er for lille til at få skrevet hele strengen på en velformateret måde :) /mvh
Synes godt om
Ny brugerNybegynder
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.