Avatar billede cygnet Praktikant
22. november 2006 - 09:04 Der er 12 kommentarer og
1 løsning

Udregne antal dage mellem to datoer.

Jeg har tre input felter i formen test. Jeg skal gerne have den til at regne antallet af dage automatisk ud hver gang man ændre datoen. Antallet af dage starter ved én. Altså hvis der er valgt den samme dag i begge er det én dag, to hvis der i fra er skrevet idag og i til er skrevet i morgen.

<input name="Fra" type="text" id="Fra" size="10" value="<%=date()%>" />
<input name="Til" type="text" id="Til" size="10" value="<%=date()%>" />
<input name="Dag" type="text" id="Dag" value="1" size="10" />

Fra og til felterne kan ændre ved at trykke på et link. Antal dage skal gerne også regnes ud hvergang man trykker på én af dem.

Se http://www.eksperten.dk/spm/746290 hvis du er i tvivl om hvad jeg mener med det sidste.
Avatar billede roenving Novice
22. november 2006 - 11:38 #1
Hrm, den bliver jo krøllet med det samme, for hvis brugerne også kan skrive, skal man jo tage højde for evt. forkerte indtastninger (eller forkerte formater !-)

-- men f.eks. sådan:

<script type="text/javascript">
function updateDays(f){
  var fra = f.Fra.value, til = f.Til.value, antDage;
  if(fra.match(/^\d\d?-\d\d?-\d{4}$/) && til.match(/^\d\d?-\d\d?-\d{4}$/)){
    fra = fra.split("-"), til = til.split("-");
    fra = new Date(fra[2], fra[1]-1, fra[0]);
    til = new Date(til[2], til[1]-1, til[0]);
    if(til>fra){
      antDage = 1 + Math.floor(fra.getTime()/(1000*60*60*24) - til.getTime()/(1000*60*60*24))
    }else antDage = "Ukendt";
    document.getElementById("Dag").value = antDage;
  }else{
    document.getElementById("Dag").value = "Ukendt";
  }
}
</script>

-- du skal så også kalde funktionen fra de funktioner, der kan ændre dagene vha links:

  updateDays(document.FORMNAVN);

-- samt fra felterne:

<input name="Til" type="text" id="Til" size="10" value="<%=date()%>" onchange="updateDays(this.form);" />

Bemærk, at jeg her accepterer formaterne:

d-m-åååå
dd-m-åååå
d-mm-åååå
dd-mm-åååå
Avatar billede roenving Novice
22. november 2006 - 11:38 #2
PS. Absolut utestet !-)
Avatar billede cygnet Praktikant
22. november 2006 - 12:10 #3
Der sker da noget - men vist en lille fejl. Når jeg vælger fra 22-11-2006 til 29-11-2006. Giver den -6 dage
Avatar billede cygnet Praktikant
22. november 2006 - 12:36 #4
jeg ændrede
antDage = 1 + Math.floor(fra.getTime()/(1000*60*60*24) - til.getTime()/(1000*60*60*24))
til
antDage = 1 + Math.floor(til.getTime()/(1000*60*60*24) - fra.getTime()/(1000*60*60*24))
og nu virker det storset. Dog skriver den Ukendt hvis der er valgt samme dag. Det må de dog godt. Den skal bare skrive 1 dag.
Avatar billede cygnet Praktikant
22. november 2006 - 12:42 #5
Hvordan skal jeg gøre så den aktivere begge ting når man klikke på linksene?

Det ser sådan ud lige nu:

<span onclick="top.document.Test.Fra.value='<%=dtmCurDate%>';return false;" onclick="updateDays(top.document.Parkering);">

Og skal scriptet både ligger på selve hovedsiden og i framen?

Men der sker ikke rigtig noget nu.
Avatar billede cygnet Praktikant
22. november 2006 - 12:42 #6
Sådan ser det ud:

<span onclick="top.document.Test.Fra.value='<%=dtmCurDate%>';return false;" onclick="updateDays(top.document.Test);">
Avatar billede roenving Novice
22. november 2006 - 12:54 #7
Sådan:

<span onclick="top.document.Test.Fra.value='<%=dtmCurDate%>';updateDays(top.document.Test);return false;">

-- og afstandsfejlen:

    if(til>=fra){
      antDage = 1 + Math.floor(til.getTime()/(1000*60*60*24) - fra.getTime()/(1000*60*60*24))
    }else antDage = "Ukendt";

-- for du har selvfølgelig ret i, at der var den logiske fejl, at de var ombyttet !-)
Avatar billede cygnet Praktikant
22. november 2006 - 15:13 #8
Nu virker det jo næsten - når man retter direkte i teksten. Den giver fejl når man aktivere det fra iframen.

den giver følgende fejl
document.getElementById(...)' er nul eller ikke et objekt.

Er det fordi scriptet ikke kan finde de værdier da de står i en form på hovedsiden?
Avatar billede roenving Novice
23. november 2006 - 00:25 #9
Det lyder som en rimelig antagelse ...

-- prøv f.eks. med:

f.parent.getElementById("Dag").

i stedet for document.getElementById("Dag"). !-)
Avatar billede cygnet Praktikant
26. november 2006 - 11:16 #10
jeg kan forsat ikke få det til virke :-( Der sker intet når man trykker - giver heller ingen fejl...
Avatar billede roenving Novice
27. november 2006 - 01:43 #11
Hrm, kan du linke til et eksempel ?-)
Avatar billede cygnet Praktikant
27. november 2006 - 07:41 #12
Har sendt link til din g-mail acount i sidste uge, men du har måske ikke modtaget det... vil helst ikke have sitet "offentligt" før det er helt færdigt.
Avatar billede cygnet Praktikant
03. juni 2011 - 11:06 #13
Kan du ligge et svar?
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