Avatar billede baitianlong Nybegynder
29. december 2004 - 14:20 Der er 8 kommentarer og
1 løsning

dato funktion, er der en samlet uge?

Jeg har et array med datoer, f.eks kan det se sådan her ud:

2005-01-12, 2005-01-13, 2005-01-14 og så videre.

Jeg skal have lavet en funktion, der kan udføre følgende:

checke om der er mindst en samlet uge (7 dage eller derover) uden huller, og samtidig checke at der ikke er nogle "løse dage" udenfor de samlede. Tricket er at den skal virke henover måneds/årskift

Hvordan hulen skal jeg gribe det an. Jeg tænkte på en løkkestruktur, der starter i tidligste dag..
Avatar billede coderdk Praktikant
29. december 2004 - 14:48 #1
Kunne gøres sådan:

<?php

    $arr = array(
            "2005-01-12"
            ,"2005-01-13"
            ,"2005-01-14"
            ,"2005-01-15"
            ,"2005-01-16"
            ,"2005-01-17"
            ,"2005-01-18"
            ,"2005-01-19"
        );

    function helUge( $arr )
    {
        $n = count( $arr );
        if ( $n < 7 )
        {
            return false;
        }
        sort( $arr );
        reset( $arr );
        for ($i = 0; $i < $n - 1; $i++ )
        {
            echo date( "d/m-Y", strtotime( $arr[ $i ] ) ) . " - ";
            echo date( "d/m-Y", strtotime( "-1 DAY", strtotime( $arr[ $i + 1 ] ) ) ) . "<br>";
            if ( strtotime( $arr[ $i ] ) != strtotime( "-1 DAY", strtotime( $arr[ $i + 1 ] ) ) )
          {
                return false;
          }
          if ( $i == 6 )
          {
              return true;
          }
        }
        return true;
    }

    if ( helUge( $arr ) )
    {
        echo "Hel uge!";
    }
    else
    {
        echo "Ikke hel uge!";
    }

?>
Avatar billede coderdk Praktikant
29. december 2004 - 14:49 #2
if ( $i == 6 )

burde nok være

if ( $i == 5 )

Da jeg jo checker $i + 1 :)
Avatar billede baitianlong Nybegynder
29. december 2004 - 15:26 #3
Det ser fint ud, men hvis nu der er nogle "løse Dage":

"2005-01-12"
,"2005-01-13"
,"2005-01-14"
,"2005-01-15"
,"2005-01-16"
,"2005-01-17"
,"2005-01-18"
,"2005-01-22"

Her skal den melde fejl også, da ingen dage må være udenfor den sammenhængende tid
Avatar billede baitianlong Nybegynder
29. december 2004 - 15:38 #4
Ok, det gør den jo også :)
Avatar billede coderdk Praktikant
29. december 2004 - 15:44 #5
Hmm kom lige til at tænke på, min kræver kun at de 7 første dage er sammenhængende... Er det acceptabelt?
Avatar billede baitianlong Nybegynder
29. december 2004 - 15:51 #6
Ja, der er nogle fejl i. Det duer ikke. Hvis man f.eks vælger 14 sammenhængende dage og en enkeltstående melder den ikke fejl.
Avatar billede baitianlong Nybegynder
29. december 2004 - 15:52 #7
Du kan prøve her: www.legende.dk/booking/kalenderny.php

Vælg to uger og en enkeltstående, og klik bestil
Avatar billede coderdk Praktikant
29. december 2004 - 15:53 #8
Du kan bare fjerne:

          if ( $i == 6 )
          {
              return true;
          }

Så checker den alle dagene i arrayet :)
Avatar billede baitianlong Nybegynder
29. december 2004 - 15:56 #9
ok, tak :)
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