Avatar billede heyn Nybegynder
06. januar 2006 - 08:24 Der er 11 kommentarer og
1 løsning

Tjek om start- og udløbsdato er valide.

Hej alle.
Jeg har lavet en side hvor man kan indføre beskeder med start- og udløbsdato.
Disse datoer har formatet 'yyyy-mm-dd hh:ii:ss'. Brugeren bestemmer dem ved anvendelse af en serie af selectbokse.
For at undgå at datoer som f.eks. 30. februar bliver indtastet kontrollerer et php-script om de overførte datoer er valide. For ikke at belaste severen unødvendigt ville det være praktisk hvis et javascript kunne klare opgaven før data overføres. Mere precist skal jeg kunne teste datoerne for følgende:
1) er de valiide. 2) er de før el. efter dags dato. 3)kommer udløbsdato før el efter startdato.
Kan nogle give mig et hint?
Mvh Christian.
Avatar billede mm12010 Nybegynder
06. januar 2006 - 08:45 #1
hvordan ser form'en ud?
Avatar billede heyn Nybegynder
06. januar 2006 - 09:32 #2
Grundlæggende således:

<form action="rediger_info_ex.php" method="post" target="_self">
<tr>
  <td>Ikraftrædelse:</td>
  <td>
      <select name="begynd_aar" id="baa">
        <option value="00" selected="selected">&nbsp;</option>
        <option value="2006">2006</option>
        <option value="2007">2007</option>
        <option value="2008">2008</option>
      </select>
  </td>
</tr>
<tr><td><input type="submit" value="Opret" name="type"></td></tr>
</form>

Der ud over er der selvfølgelig tilsvarende select for måned, dag... for både ikraftrædelse og udløbsdato, altså <select name="begynd_maaned"> ... og der er også noget textarea og php-kode sikrer at 'selected' er placeret korrekt hvis beskededen skal redigeres.
Processen fungerer men jeg ønsker at fejlmeddelelser kommer før jeg kalder "rediger_info_ex.php" fordi denne side i forvejen foretager nogle ret komplicerede handlinger, så koden kan blive svær at overskue for andre programmører der i fremtiden skulle ønske at redigere den.
Mvh Christian
Avatar billede mm12010 Nybegynder
06. januar 2006 - 11:02 #3
og det der skal testes på er at:

antallet af dage i en given måned er korrekt?

begge dage skal være efter dags dato?

udløbsdato skal være før startdato?
Avatar billede mm12010 Nybegynder
06. januar 2006 - 11:03 #4
og hvad med tidspunkterne?
Avatar billede heyn Nybegynder
06. januar 2006 - 11:41 #5
Der skal testes på om dato + tidspunkt er ok: Et par eksempler:
1) starttidspunkt: "2006-02-30 12:00:00" er forkert (30. februar findes ikke)
2) starttidspunkt: "2006-01-06 11:00:00" er forkert fordi klokken nu er 11:45.
3) starttidspunkt:  "2006-01-06 15:00:00" og
  udløbstidspunkt: "2006-01-06 12:00:00" er forkert fordi starttid er senere
  end udløbstid.
Det skal nævnes at mit php-script sikrer at select for årstal altid starter med indeværende år og 3 år frem. Lige nu er altså ikke muligt at vælge 2005.
Mvh Christian
Avatar billede mm12010 Nybegynder
06. januar 2006 - 14:03 #6
sådan?-)

<script type="text/javascript">
function twoDigits(int){
    return(int<10?"0"+int:int);
}
function isDate(aaaa,md,dd){
    md=parseInt(md,10);
    dd=parseInt(dd,10);
    daysInMonth=new Array(null,31,aaaa%4==0&&(aaaa%100!=0||aaaa%400==0)?29:28,31,30,31,30,31,31,30,31,30,31);
    if(dd>daysInMonth[md]||md>12||aaaa<1970) return false;
    return true;
}
function doLongDate(){
    dato=new Date();
    aaaa=dato.getFullYear();
    md=twoDigits(dato.getMonth()+1);
    dd=twoDigits(dato.getDate());
    tt=twoDigits(dato.getHours());
    mm=twoDigits(dato.getMinutes());
    ss=twoDigits(dato.getSeconds());
    return (aaaa+""+md+""+dd+""+tt+""+mm+""+ss);
}
function validDates(frm){
    if(!isDate(frm.begynd_aar.value,frm.begynd_maaned.value,frm.begynd_dag.value)){
        alert("Begynd ikke valid")
        return false;
    }
    if(!isDate(frm.slut_aar.value,frm.slut_maaned.value,frm.slut_dag.value)){
        alert("Begynd ikke valid")
        return false;
    }
    begynd=frm.begynd_aar.value+""+twoDigits(frm.begynd_maaned.value)+""+twoDigits(frm.begynd_dag.value)+""+twoDigits(frm.begynd_time.value)+""+twoDigits(frm.begynd_minut.value)+""+twoDigits(frm.begynd_sekund.value);
    slut=frm.slut_aar.value+""+twoDigits(frm.slut_maaned.value)+""+twoDigits(frm.slut_dag.value)+""+twoDigits(frm.slut_time.value)+""+twoDigits(frm.slut_minut.value)+""+twoDigits(frm.slut_sekund.value);
    if(begynd>=slut){
        alert("slut skal være senere end begynd")
        return false;
    }
    return true;
}
</script>
...
<form action="rediger_info_ex.php" method="post" target="_self" onsubmit="return validDates(this);">
Avatar billede mm12010 Nybegynder
06. januar 2006 - 14:06 #7
hovsa, glemte lige dags dato:

function validDates(frm){
    if(!isDate(frm.begynd_aar.value,frm.begynd_maaned.value,frm.begynd_dag.value)){
        alert("Begynd ikke valid")
        return false;
    }
    if(!isDate(frm.slut_aar.value,frm.slut_maaned.value,frm.slut_dag.value)){
        alert("Begynd ikke valid")
        return false;
    }
    begynd=frm.begynd_aar.value+""+twoDigits(frm.begynd_maaned.value)+""+twoDigits(frm.begynd_dag.value)+""+twoDigits(frm.begynd_time.value)+""+twoDigits(frm.begynd_minut.value)+""+twoDigits(frm.begynd_sekund.value);
    slut=frm.slut_aar.value+""+twoDigits(frm.slut_maaned.value)+""+twoDigits(frm.slut_dag.value)+""+twoDigits(frm.slut_time.value)+""+twoDigits(frm.slut_minut.value)+""+twoDigits(frm.slut_sekund.value);
    if(begynd<=doLongDate()){
        alert("begynd skal være senere end dagsdato")
        return false;
    }
    if(begynd>=slut){
        alert("slut skal være senere end begynd")
        return false;
    }
    return true;
}
Avatar billede heyn Nybegynder
09. januar 2006 - 11:59 #8
Tak skal du have for dit SVAR - SVAR.
I starten havde jeg lidt svært ved af forstå is date, men så vidt jeg forstår bestemmer den hvor mange dage der er i måneden mm? (jeg tror ikke mit system lever i år 2100).
Tak for dit hint - jeg fandt stien til løsningen.
Mvh Christian
P.s.: Vidste du at der helt uanmeldt er blevet foretaget et skud-sekund i år. Et sekunds mindre rente kan godt blive til en del når bankernes computere overfører pengene efter 1 dags handel på New York's børs!
Avatar billede mm12010 Nybegynder
09. januar 2006 - 13:04 #9
selv tak :o)

var det ikke et helt minut der blev lagt til årets sidste dag?
Avatar billede mm12010 Nybegynder
09. januar 2006 - 13:05 #10
.
Avatar billede heyn Nybegynder
09. januar 2006 - 13:30 #11
Måske - Så var der virkelig noget at gå efter den dag, men min lønkonto opdager det nok ikke!!!
Avatar billede roenving Novice
09. januar 2006 - 18:22 #12
-- det var et sekund, der blev skudt ind, så uret med UTC-tid sagde: 23:59:59, 23:59:60, 00:00:00 !-)

-- så der kunne have været mange penge i at have mange penge det rigtige sted ...

-- men mon ikke den slags simpelthen overses !o]
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