Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:21 Der er 37 kommentarer og
2 løsninger

Skudårssikkert script

Hej eksperter :D
Jeg har lavet mig et script som burde fortælle mig hvormange dage der er i en given måned...
Den skulle også gerne være skudårsskudsikkert (;D) men det er ligesom der er noget galt, ligemeget hvilken år jeg prøver er der 29 dage i febuar :(

Håber i kan hjælpe mig....

function antaldage($maned,$ar) {
    if ($maned == 1 || $maned == 3 || $maned == 5 || $maned == 7 || $maned == 8 || $maned == 10 || $maned == 12) {
        return 31;   
    }
    elseif ($maned == 4 || $maned == 6 || $maned == 9 || $maned == 11) {
        return 30;   
    }
    elseif ($maned == 2) {       
        if (($ar%100) == 0 || ($ar%400) != 0 || ($ar%4) != 0) {
            return 29;
        }
        else {
            return 28;
        }
    }
    else {
        return FALSE;   
    }
}
Avatar billede riversen Nybegynder
31. juli 2003 - 23:25 #1
kan du ikke bare tjekke hvilket udsagn der åbenbart siger true i den sidste else if
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:26 #2
jamen det gør den som returnere 29 jo?
Avatar billede yaief Nybegynder
31. juli 2003 - 23:26 #3
Ville det ikke være en anelse smartere, at bruge strtotime og så date på dit timestamp?
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:26 #4
jeg er ikke så vild stærk til at håndtere det med matematik i PHP, synes jeg ikke er helt logisk
Avatar billede riversen Nybegynder
31. juli 2003 - 23:27 #5
hvis du fjerne den med 400 så virker det, så det er den der driller
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:27 #6
yaief, sikkert men bliver nødt til at vide hvad det er for noget?
Avatar billede riversen Nybegynder
31. juli 2003 - 23:27 #7
det var det jeg mente du skulle finde ud af...er den virkelig nødvendig?
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:28 #8
hvordan ved du det riversen? Læste ellers et sted at det er noget med at hvert 400 år er det ikke skud år eller noed?
Avatar billede riversen Nybegynder
31. juli 2003 - 23:28 #9
jeg ved det ikke jeg spørger jo...men det er i hvert fald den der driller
Avatar billede riversen Nybegynder
31. juli 2003 - 23:28 #10
og matematik i php er ligeså logisk som al anden matematik ;-)
Avatar billede yaief Nybegynder
31. juli 2003 - 23:29 #11
echo date('t', strtotime ("$ar-$maned-1"));

aner ikke om det virker ... men interessant nok så tester lige selv =)
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:29 #12
jeg har prøvet at fjerne den og det giver samme resultat... :( kalder det med:

$dage = antaldage(2,2001);
echo"$dage";
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:30 #13
ehmn det fik jeg ikke meget ud af yaief... og det skal være en funktion således at jeg kan tjekke en given måned for hvormange dage den indeholder!

riversen: hvorfor er det den med 400 der driller?
Avatar billede riversen Nybegynder
31. juli 2003 - 23:30 #14
skal også være ($ar%4) == 0
Avatar billede riversen Nybegynder
31. juli 2003 - 23:31 #15
men du kan jo nøjes med at tjekke på 4 da det også går op i 100 og 400
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:32 #16
jah okay, men det er noget med at hver 400. år er der ikke skudår hvert 4 år... noed underlig noed!!
Avatar billede riversen Nybegynder
31. juli 2003 - 23:32 #17
men jeg mener også at have hørt hvis 100 går op i året er det IKKE et skudår
Avatar billede erikjacobsen Ekspert
31. juli 2003 - 23:32 #18
Reglen er: Det er skudår i år, der er delelige med 4, med mindre de er delelige
med 100, for så er det ikke skudår, med mindre de er delelige med 400, for så er det
skudår alligevel. År 1900 var ikke skudår (selv Microsoft Excel har påstået det), mens
2000 var skudår
Avatar billede yaief Nybegynder
31. juli 2003 - 23:33 #19
Det her virker vist ...

$ar = "2004"; $maned= "02";
echo date('t', strtotime ("$maned/01/$ar"));
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:33 #20
Nu tror jeg det virker efter en del forsøg frem og tilbage :D læg et svar riversen og mange tak for hjælpen!!
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:34 #21
function antaldage($maned,$ar) {
    if ($maned == 1 || $maned == 3 || $maned == 5 || $maned == 7 || $maned == 8 || $maned == 10 || $maned == 12) {
        return 31;   
    }
    elseif ($maned == 4 || $maned == 6 || $maned == 9 || $maned == 11) {
        return 30;   
    }
    elseif ($maned == 2) {       
        if (($ar%100) == 0 || ($ar%4) == 0) {
            return 29;
        }
        else {
            return 28;
        }
    }
    else {
        return FALSE;   
    }
}

den her funktion virker i nutiden, men vil den også virker om 2403 år?
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:35 #22
nej den siger også at 1900 er et skudår :(
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:35 #23
hvordan skal man lave den if sætning erikjacobsen?
Avatar billede yaief Nybegynder
31. juli 2003 - 23:36 #24
hmm ... ok - min virker, men da den bruger unix timestamp virker den kun efter 1970 ...
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:37 #25
hehe det er jo så et problem da den skal kunne teste for alle måneder og år folk kan finde på
Avatar billede repsac Nybegynder
31. juli 2003 - 23:37 #26
og om man nu ønsker det i en funktion:

function antaldage($maaned, $aar) {
    if (!is_integer($maaned) || !is_integer($aar)) {
        return FALSE;
    }

    return date('t', mktime(0, 0, 0, $maaned, 1, $aar));
}
Avatar billede yaief Nybegynder
31. juli 2003 - 23:39 #27
smukt =)
Avatar billede riversen Nybegynder
31. juli 2003 - 23:40 #28
ellers for at fortsætte som du selv startede:

function antaldage($maned,$ar) {
    if ($maned == 1 || $maned == 3 || $maned == 5 || $maned == 7 || $maned == 8 || $maned == 10 || $maned == 12) {
        return 31;   
    }
    elseif ($maned == 4 || $maned == 6 || $maned == 9 || $maned == 11) {
        return 30;   
    }
    elseif ($maned == 2)
    {       
        if( $ar % 400 == 0 )
            return 29;
        else if( $ar % 4 == 0 && $ar % 100 != 0 )
            return 29;
        else {
            return 28;
        }
    }
    else {
        return FALSE;   
    }
}

skulle virke
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:40 #29
function antaldage($maned,$ar) {
    if ($maned == 1 || $maned == 3 || $maned == 5 || $maned == 7 || $maned == 8 || $maned == 10 || $maned == 12) {
        return 31;   
    }
    elseif ($maned == 4 || $maned == 6 || $maned == 9 || $maned == 11) {
        return 30;   
    }
    elseif ($maned == 2) {       
        if (($ar%4) == 0) {
            if (($ar%100) == 0) {
                if (($ar%400) == 0) {
                    return 29;
                }
                else {
                    return 28;
                }
            }
            else {
                return 29;
            }
        }
        else {
            return 28;
        }
    }
    else {
        return FALSE;   
    }
}

burde den funktion ikke virke??
Den virker med 1900 og 2004 og 2000 osv...
Avatar billede riversen Nybegynder
31. juli 2003 - 23:41 #30
jo
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:41 #31
okay men du har stadig ikke lagt et svar riversen ;)
Avatar billede repsac Nybegynder
31. juli 2003 - 23:48 #32
jeg ville lave testet som følger:

$first = array(1,3,5,7,8,10,12);
$second = array(4,6,9,11);
if (in_array($maned, $first)) {
    return 31;
} elseif (in_array($maned, $second)) {
    return 30;
} elseif ($maned == 2) {
    if (...

} else {
    return FALSE; # The month should be in the range from 1 to 12...
}

Er det lidt smukkere? :)
Avatar billede elskermad.dk Nybegynder
31. juli 2003 - 23:55 #33
jah men det skal jo også være sådan jeg selv kan rette i det hvis det bliver nødvendig, og fatter nada af arrays... desværre! :( findes der ingen gode guider nogen steder?
Avatar billede repsac Nybegynder
01. august 2003 - 00:12 #34
Jammen... lad mig foreklare et kort sekund:

Et array er en liste af værdier -- intet andet.

$testarray = array('hest', 'træ', 'bluse');

Nu har vi lavet et array. Array'et er i variablen $testarray og indeholder elementernet 'hest', 'træ', 'bluse'. Disse tre elementer i array'et kan tilgås på følgende måde ("subscription" som det hedder):
echo $testarray[0]; // Output'er teksten  hest .
echo $testarray[1]; // Output'er teksten  træ . Osv.

Men(!) man kan også selv bestemme hvad der skal bruges til at indeksere listen. I eksemplet over var det tallene 0 til 2, men ønsker man strengen 'dyr' til at indeksere det første element i arrayet med værdien 'hest', tekststrengen 'skov' til at indeksere det andet element med værdien 'træ' samt tekststrengen 'tøj' til at indeksere tredje og sidste element i array'et med værdien 'bluse', gøres det på følgende måde:
$nyt_array = array('dyr' => 'hest', 'skov' => 'træ', 'tøj' => 'bluse');
Nu kan værdien 'hest' tilgås med $nyt_array['dyr'];

Det er knap det hele, men givetvis nok til en begyndelse :)
- spørg google.com efter hvad der ellers findes af gode tutorials ude i verden ;) www.google.com/search?q=php+array+tutorial ?
Avatar billede elskermad.dk Nybegynder
01. august 2003 - 00:58 #35
okay mange tak :D læg et svar både repsac og riversen!
Avatar billede riversen Nybegynder
01. august 2003 - 07:37 #36
ok
Avatar billede repsac Nybegynder
01. august 2003 - 09:33 #37
ok
Avatar billede elskermad.dk Nybegynder
01. august 2003 - 10:24 #38
så fik i 15 hver ;D
Avatar billede repsac Nybegynder
01. august 2003 - 11:39 #39
ok
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