Avatar billede nemlig Professor
23. maj 2009 - 10:43 Der er 10 kommentarer og
1 løsning

Tjek om dato ligger i perioden 1. november til 1. marts

Hejsa.
Jeg har denne lille udfordring, der driller mig.
I en input-formular er der angivet en dato, fx. "2008-11-30"

Jeg skal så lave en if-sætning, hvor jeg tjekker om datoen ligger efter 1. november, men før 1. marts - altså i en slags vinterperiode - uanset årstal.

Håber på lidt hjælp.
Avatar billede fusion-it Nybegynder
23. maj 2009 - 10:48 #1
Jeg er ikke så god til PHP men mon ikke du kan bruge noget af dette her ?

http://www.html.dk/tutorials/asp/lektion6.asp
Avatar billede hmm10 Nybegynder
23. maj 2009 - 12:05 #2
<?

$currentdate = "2008-11-30";
$mdr_array = array(11,12,1,2);

if (in_array(substr($currentdate, 5, 7), $mdr_array)) {
    print "Dato '".$currentdate."' er en vinderperiode.";
}

?>
Avatar billede nemlig Professor
23. maj 2009 - 13:20 #3
hmm10:
Interessant - dog vil jeg mene at

substr($currentdate, 5, 7)
skal være
substr($currentdate, 5, 2)

Beklager at jeg ikke har gjort det helt tydeligt.
Men det kan altså være, at vinterperioden gælder fra fx.
5. november til 5 marts.
Derfor vil en løsning, hvor der også tages højde for dagene være perfekt.
Man kunne fx definere 2 variabler, der markerer perioden:
$startperiode = '11-05'; //11=måned og 05=dato
$slutperiode = '03-05'; //03=måned og 05=dato
Avatar billede inctor Nybegynder
23. maj 2009 - 14:49 #4
Angives datoen i hvert sit input felt eller i det samme felt adskilt med hvilken seperator?
Avatar billede nemlig Professor
23. maj 2009 - 15:17 #5
Datoen som der skal tjekkes og som er indtastet i et input-felt indtastes i formattet "dd-mm-yyyy", men jeg har lavet en funktion, som ændrer formattet til "yyyy-mm-dd", hvorfor begge formatter kan anvendes.

Angivelse af perioden er blot tænkt som angivelse af 2 variabler, fx. som foreslået i #4. Pointen er bare, at jeg lige nu ikke kender perioden præcis, hvorfor det nemt skal kunne ændres, men gerne direkte i koden.
Avatar billede labisama Nybegynder
23. maj 2009 - 15:20 #6
Hvad med at benytte dig af uge numre? Er det præcist nok?

Fx.

$ugenr = date("W", strtotime($currentdate));

Og så lave en if med $ugenr.
Avatar billede hmm10 Nybegynder
23. maj 2009 - 15:31 #7
<?

$currentdate = "2009-03-05";

if (chekperiode($currentdate)) {
    print "Dato '".$currentdate."' er en vinderperiode. <br>";
}

function chekperiode($currentdate) {
    $startperiode = "12-05";
    $slutperiode = "03-05";
    $startaar = "2005";
    $i = 0;   
    while ($i+$startaar <= substr($currentdate, 0, 4)) {
        $whileaar = ($i+$startaar);
        $whilestartperiode = strtotime($whileaar."-".$startperiode);
        $whileslutperiode = strtotime($whileaar."-".$slutperiode." 23:59:59");
        if ($whilestartperiode > $whileslutperiode) {
            $whileslutperiode = strtotime(($whileaar+1)."-".$slutperiode." 23:59:59");
        }
        if (strtotime($currentdate) >= $whilestartperiode && strtotime($currentdate) < $whileslutperiode) {
            return true;
        }
        $i++;
    }
    return false;
}

?>
Avatar billede hmm10 Nybegynder
23. maj 2009 - 15:36 #8
Det er ikke verdens bedste script, da while() umeldbart godt kan undværes.
Avatar billede nemlig Professor
23. maj 2009 - 15:43 #9
hmm10: Ikke desto mindre ser det ud til at virke. Jeg tester lige lidt og vender snart tilbage.
Avatar billede nemlig Professor
23. maj 2009 - 16:05 #10
hmm10: Tak for dit færdige script. Det er nemt at gå til, og virker 100% efter hensigten.
Sender du svar.

Og tak til jer andre for også at bidrage til løsning.
Avatar billede hmm10 Nybegynder
23. maj 2009 - 18:32 #11
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