Avatar billede kimlarsen1978 Nybegynder
23. juni 2008 - 19:39 Der er 14 kommentarer og
1 løsning

Sammenlign 2 datoer i validering

Hejsa
Jeg har 2 datofelter:

<FORM.... onsubmit="validate(this)">
<input class="generelFormStyle" type="text" size="12" name="startdato" value="" onblur="alertCheckDate(this)" />
<input class="generelFormStyle" type="text" size="12" name="slutdato" value="" onblur="alertCheckDate(this)" />
</FORM>

Formatet er DAG-MDR-ÅR fx 23-06-2008

I validate() vil jeg så gerne tjekke at slutdatoen er større eller lig med startdatoen. Hvordan gør jeg det?

function validate(formRef){
    var startdato = formRef.startdato.value;
    var slutdato = formRef.slutdato.value;
    if (startdato > slutdato) {
      Alert('Slutdato skal være efter startdato');
      return false;
    }
}

Jeg har forsøgt lidt af hvert, men kan ikke få datosammenligningen til at virke :-(
Avatar billede thesurfer Nybegynder
23. juni 2008 - 19:52 #1
Jeg er ikke helt sikker, men prøv med:

    var startdato = new Date(formRef.startdato.value);
    var slutdato = new Date(formRef.slutdato.value);
Avatar billede kimlarsen1978 Nybegynder
23. juni 2008 - 20:06 #2
Hejsa
Ja, det er noget af det jeg har forsøgt, men det virker ikke 100%

Det virker fx. ved:
startdato = "23-10-2008"
slutdato = "20-09-2008"

Men det virker ikke ved fx.
startdato = "01-01-2008"
slutdato = "31-12-2007"

:-(
Avatar billede w13 Novice
23. juni 2008 - 20:29 #3
Også når du bruger new Date()?
Avatar billede thesurfer Nybegynder
23. juni 2008 - 20:39 #4
Der skal stå "alert" med små bogstaver:

function validate(formRef){
    var startdato = new Date(formRef.startdato.value);
    var slutdato = new Date(formRef.slutdato.value);
    if (startdato > slutdato) {
      alert('Slutdato skal være efter startdato');
      return false;
    }
}
Avatar billede thesurfer Nybegynder
23. juni 2008 - 20:40 #5
Og du mangler "return" i din onsubmit:

onsubmit="return validate(this)"
Avatar billede kimlarsen1978 Nybegynder
23. juni 2008 - 23:24 #6
Ja, også når jeg bruger new Date().

De øvrige ting som thesurfer nævner er OK, det gik bare lidt hurtigt da jeg skrev noten her på eksperten. Beklager. Alert er skrevet alert og der står return validate(this)

Men som sagt ved

function validate(formRef){
    var startdato = new Date(formRef.startdato.value);
    var slutdato = new Date(formRef.slutdato.value);
    if (startdato > slutdato) {
      alert('Slutdato skal være efter startdato');
      return false;
    }
}

så virker fx. ved:
startdato = "23-10-2008"
slutdato = "20-09-2008"

Men det virker ikke ved fx.
startdato = "01-01-2008"
slutdato = "31-12-2007"

:-(
Avatar billede olebole Juniormester
23. juni 2008 - 23:53 #7
<ole>

function validate(formRef){
    var startdato = formRef.startdato.value.split("-");
    var slutdato = formRef.slutdato.value.split("-");
    startdato = new Date(startdato[2], startdato[1]-1, startdato[0]);
    slutdato = new Date(slutdato[2], slutdato[1]-1, slutdato[0]);
    if (startdato > slutdato) {
      alert('Slutdato skal være efter startdato');
      return false;
    }
}

/mvh
</bole>
Avatar billede kimlarsen1978 Nybegynder
24. juni 2008 - 00:19 #8
Det var sådan det skulle se ud :-)
Svar bitte...
Avatar billede olebole Juniormester
24. juni 2008 - 00:24 #9
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Date

Rækkefølgen er: År, måned, dag - og da januar er måned nummer 0 og december nummer 11, skal der trækkes én fra: startdato[1]-1  =)
Avatar billede olebole Juniormester
24. juni 2008 - 00:26 #10
- altså i JavaScript er januar måned nummer 0 og december nummer 11  ;o)
Avatar billede kimlarsen1978 Nybegynder
24. juni 2008 - 00:37 #11
Cool, mange tak!
Avatar billede olebole Juniormester
24. juni 2008 - 00:44 #12
Selvtak - og tak for points  ;o)
Avatar billede thesurfer Nybegynder
24. juni 2008 - 18:51 #13
olebole> Lige efter indlægget 24/06-2008 00:24:05 var jeg på vej til at smide alle mine kalendere ud, da de jo ikke passede.. men så skrev du indlægget 24/06-2008 00:26:05, og de fik lov til at blive.. :-)


Egentligt bør man vel først splitte ved " ", og arbejde med index 0, da klokkeslæt kan indgå i datoernes value.. F.eks. ville "24-06-2008 12:34:56" naturligvis give en fejl..

Men det kan være, at det er det alertCheckDate forhindrer..
Avatar billede olebole Juniormester
24. juni 2008 - 19:24 #14
Du laver vel ikke pjatfis med en aldrende herre? Du burde vist have lunet dine baglommer!  ;D

Ang. tidsformatet, så var jeg så uforskammet at læse spørgsmålet:
    "Formatet er DAG-MDR-ÅR fx 23-06-2008"

Jeg ved godt, det var lusket - men jeg håber, du tilgiver mig mine frækheder  ;o)
Avatar billede olebole Juniormester
24. juni 2008 - 19:26 #15
- altså jeg mener ikke, det var lusket eller en frækhed at flappe dig et par virtuelle flade! Det med mine frækheder gik udelukkende på, at jeg havde læst spm'et  ;D
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