Avatar billede mickill Nybegynder
14. november 2005 - 10:41 Der er 9 kommentarer og
1 løsning

antal dage mellem 2 datoer

Hej

Jeg har 3 felter dato1, dato2 og antalDage
Jeg kunne godt tænke mig at når man har indtastet de 2 datoer skal antal dage der er mellem de 2 datoer fremkomme i feltet antalDage.

Hvordan ?

/Mickill
Avatar billede skovenborg Nybegynder
14. november 2005 - 16:40 #1
i hvilket format bliver de to datoer indtastet?

Det gælder nemlig om at konvertere de to datoer til hvert sit javascript Date-objekt. Hvis man har sådanne to kan man finde forskellen i millisekunder, og derfra er der jo bare at omregne det til dage
Avatar billede roenving Novice
14. november 2005 - 19:33 #2
Måske kan du finde lidt inspiration i toDays()-funktionen her: http://roenving.users.whitehat.dk/date/roenvingDate.html !-)
Avatar billede roenving Novice
14. november 2005 - 19:34 #3
PS. Hvis man ikke bruger den langsomme konvertering kan man få overraskelser ved live-datoer, altså f.eks. 14/11-2005 19:33:08 !o]
Avatar billede mickill Nybegynder
15. november 2005 - 09:01 #4
Det bliver tastet som kort datoformat: 2005/11/15
Avatar billede roenving Novice
15. november 2005 - 20:30 #5
F.eks.

function numDays(dato1,dato2){
  var reg = /^\d{4}\/\d\d\/\d\d$/;//regexp, der betyder 0000/00/00, hvor nullet står for et tilfældigt tal
  if(!dato1.match(reg) || !dato1.match(reg)){
    alert("Fejl i datoformat");
    return false;
  }
  dato1 = dato1.split("/");
  dato2 = dato2.split("/");
  var d1 = new Date(+dato1[0],+dato1[1]-1,+dato1[2]);
  var d2 = new Date(+dato2[0],+dato2[1]-1,+dato2[2]);
  var msDiff = Math.abs(d2.getTime()-d1.getTime());//Forskel i millisekunder
  return msDiff/(1000*60*60*24);//24 t. à 60 m. à 60 s. à 1000 millisekunder = 1 dag
}

-- så vil funktionen returnere antal dage mellem de to datoer i tekststrengene dato1 og dato2 !-)

-- bruges f.eks. sådan:

//f er en form (-objekt !-) og dato1 og -2 er felter i den form
var antalDage = numDays(f.dato1.value,f.dato2.value);
if(!antalDage || antalDage > 31){
  if(antalDage)
    alert("Der må ikke være mere end 31 dage mellem datoerne");
  return false;
}
Avatar billede mickill Nybegynder
16. november 2005 - 14:52 #6
Hej Roenving

jeg skal måske lige fortælle at jeg ikke har en fløjtende fis forstand på javascript, så det ville derfor være super hvis du gad vise et eksempel hvori formularen indgår

/Mickill
Avatar billede roenving Novice
16. november 2005 - 15:01 #7
F.eks.

<script type="text/javascript">
function numDays(dato1,dato2){
  var reg = /^\d{4}\/\d\d\/\d\d$/;//regexp, der betyder 0000/00/00, hvor nullet står for et tilfældigt tal
  if(!dato1.match(reg) || !dato2.match(reg)){
    alert("Fejl i datoformat");
    return false;
  }
  dato1 = dato1.split("/");
  dato2 = dato2.split("/");
  var d1 = new Date(+dato1[0],+dato1[1]-1,+dato1[2]);
  var d2 = new Date(+dato2[0],+dato2[1]-1,+dato2[2]);
  var msDiff = Math.abs(d2.getTime()-d1.getTime());//Forskel i millisekunder
  return msDiff/(1000*60*60*24);//24 t. à 60 m. à 60 s. à 1000 millisekunder = 1 dag
}
</script>

<form>
Dato 1: <input name="dato1"><br>
Dato 2: <input name="dato2" onchange="f=numDays(this.form.dato1.value,this.value);this.form.forskel.value=f?f:'Fejl i dato(er)'"><br>
Forskel: <input name="forskel" readonly="readonly">
</form>
Avatar billede mickill Nybegynder
17. november 2005 - 09:10 #8
Tak, det virker helt perfekt.

Så hvis du lige lægger et svar.

Og endnu en gang tak for hjælpern
Avatar billede roenving Novice
17. november 2005 - 09:37 #9
Velbekomme '-)
Avatar billede roenving Novice
17. november 2005 - 12:19 #10
-- og tak for point ;~}
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