Avatar billede jens_k Nybegynder
09. august 2003 - 17:02 Der er 25 kommentarer og
1 løsning

Antal dage mellem 2 datoer.

Hej
Jeg har 2 input bokse.. De hedder "start" og "slut"

I dem bliver der iskrevet en dato, f.eks "24-07-2003" til "29-08-2003".

Jeg skal bruge en som finder ud af om der er over 1 måned i forskel, eller over 1 år, osv..

Hvis der er under 1 måned imellem de datoer, så skal den gøre dette :

  document.form.action='list_days.asp'

Hvis der er over 1 måned skal den bruge :

  document.form.action='list_weeks.asp'

Hvis der er over 1 år :

  document.form.action='list_months.asp'


Hvordan får jeg det fikset ?

Mvh

Jens K
Avatar billede roenving Novice
09. august 2003 - 17:04 #1
Opfører dine brugere sig pænt ?-)

Dvs. kan man regne med at datoerne er formatteret præcis, som du angiver ?-)
Avatar billede jens_k Nybegynder
09. august 2003 - 17:05 #2
Ja, det kan man, for de bliver valgt ud fra en DatePicker, så de kan ikke komme til at rode rundt i det :)

Jens K
Avatar billede mm12010 Nybegynder
09. august 2003 - 17:16 #3
start = "24-07-2003";
    slut = "29-08-2003";           
    inter = Math.round((Date.parse(slut) - Date.parse(start) / 1000 / 60 / 60 / 24);
    if(inter < 30){
        document.form.action='list_days.asp'
        }
    else{
        document.form.action='list_weeks.asp';
        }
Avatar billede roenving Novice
09. august 2003 - 17:49 #4
Endnu ikke stress-testet (kun en 27-28 tilfælde prøvet !-)

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Tomt dokument</title>
<meta name="keywords" content="http://www.eksperten.dk/spm/385544">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
function checkDates(f){
  var start = f.start.value;
  var slut = f.slut.value;
  if(start==""||slut=="")return;
    var st = new Date(+start.substring(6),+start.substring(3,5),+start.substring(0,2));
    var sl = new Date(+slut.substring(6),+slut.substring(3,5),+slut.substring(0,2));
    if(st.getTime()>sl.getTime())return
    var st1 = +start.substring(6);
    var st2 = +start.substring(3,5);
    var st3 = +start.substring(0,2);
    var sl1 = +slut.substring(6);
    var sl2 = +slut.substring(3,5);
    var sl3 = +slut.substring(0,2);
    if(sl1>st1+1||sl1>st1&&sl2>st2||sl1>st1&&sl2==st2&&sl3>=st3)alert("document.form.action='list_months.asp'");
    else if(sl1>st1&&sl2!=1&&st2!=12||sl1>st1&&sl2==1&&st2==12&&sl3>=st3||sl2>st2+1||sl2>st2&&sl3>=st3)alert("document.form.action='list_weeks.asp'");
    else alert("document.form.action='list_days.asp'");   
}
</script>
</head>
<body>
<br>
<form name="form">
<input name="start" type="text">
<input name="slut" type="text" onchange="checkDates(this.form);">
</html>
Avatar billede Slettet bruger
09. august 2003 - 18:26 #5
Jeg ved ikke, om det er helt godt nok, men det er i hvert fald kortere og mindre kompliceret end roenvings:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function tjekDatoer(frm) {
  st = frm.start.value.split("-");
  sl = frm.slut.value.split("-");
  std = new Date(parseInt(st[2], 10), parseInt(st[1] - 1, 10), parseInt(st[0], 10));
  sld = new Date(parseInt(sl[2], 10), parseInt(sl[1] - 1, 10), parseInt(sl[0], 10));
  forsk = (sld.getTime() - std.getTime()) / (1000 * 60 * 60 * 24);
  frm.action = "list_" + ((forsk >= 365) ? "months" : (forsk >= 30) ? "weeks" : "days") + ".asp";
  alert(frm.action); //Slet denne linje
}
</script>
</head>
<body>
<form action="" onSubmit="tjekDatoer(this); return true;">
Start: <input type="text" name="start" value="dd-mm-åååå" /><br />
Slut: <input type="text" name="slut" value="dd-mm-åååå" /> <input type="submit" value="Send" />
</form>
</body>
</html>

Hvis der er 365 eller flere dage imellem datoerne, bliver "months" vist. Hvis der er 30 eller flere dage imellem, bliver "weeks" vist. Og eller bliver "days" vist.
Avatar billede Slettet bruger
09. august 2003 - 18:26 #6
Og eller = og ellers
Avatar billede roenving Novice
09. august 2003 - 18:32 #7
>>phoenixv

-- jeg tænkte også på den løsning, men blev enig med mig selv om, at jeg skulle prøve at genskabe den tænkemåde, jeg selv har, når jeg kigger på to datoer ...

-- og det er utroligt så komplicerede tankegange vi bruger i løbet af et split-sekund !-)
Avatar billede Slettet bruger
09. august 2003 - 18:34 #8
roenving>> Ja, det er vel optimalt. Du bør i øvrigt være opmærksom på, at JavaScript kan fortolke "08" som et heksidemalt tal og ikke et decimalt tal som ønsket. Derfor er løsningen med at sætte et plus foran nok ikke god nok.
Avatar billede roenving Novice
09. august 2003 - 18:39 #9
Oktalt mener du selvfølgelig ...

-- men så burde den vel komme med en fejlmelding på +'08' ?-)

-- som den faktisk kommer med på parseInt('08') ...
Avatar billede Slettet bruger
09. august 2003 - 18:44 #10
Nej, heksidemalt er det vist. Har ikke lige styr på logikken i øjeblikket, men mener jakoba har sagt det engang.

Og der skal bruges parseInt("08", 10);
Avatar billede roenving Novice
09. august 2003 - 18:44 #11
-- og jeg skulle så lige teste, og opdagede så at jeg jo havde en potentiel fejl i min new Date, men + virker helt suverænt på de to-cifrede, da det enten kan fortolkes som oktal-tal (01-07) og så er de ens, og 08/09 kan _ikke_ fortolkes som oktal, så de regnes som decimale !-)
Avatar billede roenving Novice
09. august 2003 - 18:46 #12
>>jens_k

Men mine new Dates skal være:

    var st = new Date(+start.substring(6),+start.substring(3,5)-1,+start.substring(0,2));
    var sl = new Date(+slut.substring(6),+slut.substring(3,5)-1,+slut.substring(0,2));
Avatar billede Slettet bruger
09. august 2003 - 18:48 #13
Det kan vel stadig tolkes som heksidemaltal? Eller misser jeg en pointe?
Avatar billede roenving Novice
09. august 2003 - 18:49 #14
>>phoenixv

Hexadecimale tal skal på javascriptsk skrives 0x7a (altså med nul-eks foran !-)
Avatar billede Slettet bruger
09. august 2003 - 18:51 #15
Ok, det vidste jeg ikke. Jeg bruger det jo aldrig.

Men tak for oplysningen! :)
Avatar billede Slettet bruger
09. august 2003 - 18:53 #16
Burde fx "12" ikke kunne tolkes som det oktale 10?
Avatar billede roenving Novice
09. august 2003 - 18:54 #17
Og jeg fik checket et lille hjørne af + - funktionen, fktisk rart at vide, at nogle andre ting, jeg har givet andre virker efter hensigten (lette netop pga. +'et !-)
Avatar billede roenving Novice
09. august 2003 - 18:54 #18
Nej oktal-tal _skal_ have nullet foranstillet ...
Avatar billede roenving Novice
09. august 2003 - 18:55 #19
Så '012' vil javascript sikkert fortolke som decimalt 10 ...
Avatar billede Slettet bruger
09. august 2003 - 18:56 #20
Godt, så er det vist på plads, og jeg fik lært noget. Dejligt! :)
Avatar billede roenving Novice
09. august 2003 - 18:57 #21
-- næh, med min wewriter fortolkede den også '012' som 12 decimalt !-)
Avatar billede jens_k Nybegynder
09. august 2003 - 19:02 #22
Ok, jeg går igang med at teste :D

Dejligt med alle disse svar/kommentar :D

Btw, bruger i notepad til at scripte i ? Eller bruger i et andet program ?
Avatar billede roenving Novice
09. august 2003 - 19:07 #23
Jeg gør det normalt i min WebWriter (i html-mode !-), for så kan jeg lave nogle hurtige skift over til browser-visning, men script-visning er ikke til at råbe hurra for (Stone's WebWriter 3.5.4 -- der skulle komme en ny fuld v4 i denne måned -- og den er gratis til privat brug !-)
Avatar billede Slettet bruger
10. august 2003 - 16:51 #24
Jeg bruger MAX's HTML Beauty++ ME. Helt gratis og med en masse geniale funktioner.
Du kan finde programmet på www.webattack.com
Avatar billede jens_k Nybegynder
10. juni 2004 - 03:34 #25
phoenixv laver du lige et svar ?
Avatar billede Slettet bruger
10. juni 2004 - 15:11 #26
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

IT-JOB