Hi,

ik heb de volgende vraag.

ik heb 2 datums, bijv. startdatum = 1-4-2007 einddatum = 31-3-2009

nu wil ik per jaar het aantal maanden weten, dus in bovenstaand voorbeeld:

$a[2007] = 8;
$a[2008] = 12;
$a[2009] = 3;

Kan ik dit makkelijk met PHP bereiken?

alvast bedankt!!
Je bedoelt de maanden die nog gaan komen vanaf je startdatum? Of bedoel je iets anders.

(Code doe je trouwens tussen [ignore]
[/ignore] tags.)
hij bedoelt denk ik dat als je deze bij elkaar opteld dat je dan het aantal maanden krijgt
(leg het iets beter uit de vlogende keer :) )
Ik snap nog steeds niet wat ie nou wil, maar dat zal wel aan mij liggen ;)
Misschien dit aanpassen?
SanThe, wanneer ik je domein probeer te bereiken krijg ik een 503 error. Met www ervoor lukt het wel.
Evert schreef op 04.07.2008 12:46
SanThe, wanneer ik je domein probeer te bereiken krijg ik een 503 error. Met www ervoor lukt het wel.

Dat klopt.
Ooit een keer een groot/leuk script geschreven/gemaakt met iemand. Die doet wat je wilt ;).

<?php





/*
@timeS is tijd/dag in een in de vorm van DD-MM-YYYY@HH:mm:ss, bij
geen @ in de string gaat hij er vanuit dat u alleen een tijd invoerd, is de
start tijd groter dan de begintijd, en heeft u geen datum ingevoerd gaat hij
er vanuit dat het de vorige dag gestart is ( wildcards (*) zijn toegestaan)
@timeE --> zie timeS
@interval (int) 0=1malig, 1=iedereweek, 2=iederemaand, 3=iederjaar
@when alleen nodig als interval > 0,
als interval = 1 --> when is dag van de week met zondag = 0 en
zaterdag=6
als interval = 2 --> when is dag van de maand, kunt u ook doen door
dit in te vullen bij startijd 26-*-*@12:00:00 = iedere 26ste om 12 uur (je
mag iedergeval geen datum invoeren want dan werkt het niet)
als interval = 3 --> when is dag van het jaar (start het tellen bij 1),
kunt u ook doen door dit
in te vullen bij startijd 26-05-*@12:00:00 = ieder jaar 26 mei om 12 uur
dit met die * werkt ook bij uren en minuten en seconden alleen is het
nut daar wat minder
@$compair_str standaard is dit time(), echter indien gewenst kunt u zelf ook een unix timestamp meezenden
*/


// GEBRUIK
/*
tussen("12-02-1985@23:12:54","13-11-2007@23:12:54"); 
geeft true terug als het nu tussen 12-02-1985@23:12:54 en 13-11-2007@23:12:54 is. 

tussen("10:12:34","14:23:23"); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is 

tussen("10:12:34","14:23:23",1,1); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is en het maandag is 

tussen("10:12:34","14:23:23",1,6); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is en het zaterdag is 

tussen("10:12:34","14:23:23",2,28); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is en het de 28ste van de maand is is 

tussen("","",2,28); 
geeft true terug als het de 28ste van de maand is is 

tussen("10:12:34","14:23:23",3,365); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is en het de 365ste dag van het jaar is 

tussen("*:12:34","*:23:23"); 
geeft true terug als het tussen 12:34 min over het hele uur is en 23:23 min 

tussen("12-*-2007@10:12:34","15-*-2007@14:23:23",2,28); 
geeft true terug als het tussen 10:12:34 en 14:23:23 is en het tussen de 12ste en de 15de van de maand is in het jaar 2007
*/

function tussen($timeS, $timeE, $interval=0, $when=0,$compair_str=-1)
{
    //string omzetten indien nodig:
    if($compair_str == -1 || !is_int($compair_str))
    	{
        $time = time();
    	}
    else
    	{
        $time = $compair_str;
    	}

    //eerst even die * er uit halen ziet er leuk uit maar functioneel is het niet:P
    $timeS = str_replace("*","",$timeS);
    $timeE = str_replace("*","",$timeE);

    //eerst opsplitsen in datum en tijd (2x)
    if (strpos($timeS,"@"))
    {
        list($datumS,$tijdS) = explode("@",$timeS,2);
        list($dagS,$maandS,$jaarS) = explode("-",$datumS,3);
        list($uurS,$minuutS,$secondeS) = explode(":",$tijdS,3);
    }
    else
    {
        $tijdS=$timeS;
        list($uurS,$minuutS,$secondeS) = explode(":",$tijdS,3);
        $dagS = $maandS = $jaarS="";
    }

    if (strpos($timeE,"@"))
    {
        list($datumE,$tijdE) = explode("@",$timeE,2);
        list($dagE,$maandE,$jaarE) = explode("-",$datumE,3);
        list($uurE,$minuutE,$secondeE) = explode(":",$tijdE,3);
    }
    else
    {
        $tijdE=$timeE;
        list($uurE,$minuutE,$secondeE) = explode(":",$tijdE,3);
        $dagE=$maandE=$jaarE="";
    }
    
    $return = false;
    $jaarN = date("Y",$time);
    if (($jaarS==$jaarE && ($jaarE == "" || $jaarE==$jaarN)) ||($jaarS<=$jaarN&&$jaarN<=$jaarE))
    {
        if ($jaarN != $jaarE && $jaarN != $jaarS)
        {
            return true;
          }
        $maandN = date("m",$time);
        if (($maandS == $maandE && ($maandE == "" || $maandE == $maandN)) || ($maandS <= $maandN &&    $maandN <= $maandE))
        {
            if ($maandN != $maandE && $maandN != $maandS)
            {
                return true;
            }
            $dagN = date("d",$time);
            if (($dagS == $dagE && ($dagE == "" || $dagE == $dagN)) || ($dagS <= $dagN && $dagN <= $dagE))
            {
                if ($dagN != $dagE && $dagN != $dagS)
                {
                    return true;
                }
                // als we hier komen heb je
                // of geen datum ingvuld of voldoet de datum aan de eisen
                // echter er zijn nog wat
                // opties die we nu moeten bekijken voor de tijd,
                // namelijk de interval opties
                $interval_accort = false;
                if ($interval == 0)
                {
                    $interval_accort = true;
                }
                // logisch want je hebt geen interval neergezeet
                if ($interval == 1)
                {
                    //dag van de week:
                    $dvdw = date("w",$time);
                    if ($dvdw == $when)
                    {
                        $interval_accort=true;
                    }
                }
                if ($interval == 2)
                {
                    $dvdm = date("d",$time);
                    if ($dvdm == $when)
                    {
                        $interval_accort = true;
                    }
                }
                if ($interval == 3)
                {
                    $dvhj = date("z",$time) + 1;
                    if ($dvhj==$when)
                    {
                        $interval_accort=true;
                    }
                }
                //dat was het interval intermetzo, we gaan nu verder mits het interval accort is
                if ($interval_accort)
                {
                    $uurN = date("H",$time);
                    //schrik niet dit is voor het vorige dag probleem
                    if (
                        (
                            ($uurS == $uurE && ($uurE=="" || $uurE==$uurN))
                            ||
                                ($uurS <= $uurN && $uurN <= $uurE)
                            ||
                            (
                                (
                                    ($dagS == $dagE &&     $dagE == $maandS && $maandS == $maandE && $maandE == $jaarS && $jaarS == $jaarE && $jaarE == "")
                                    ||
                                        ($dagN>$dagS || ($dagN < $dagS && ($maandN > $maandS || ($maanN < $maandS && jaarN > $jaarS))))
                                    &&
                                        $uurE < $uurS && (($uurS <= $uurN && $uurN <= 23) || (00 <= $uurN && $uurN <= $uurE))
                                )
                            )
                        )
                        )
                    {
                            if ($uurN != $uurE && $uurN != $uurS)
                            {
                                return true;
                            }
                            $minuutN = date("i",$time);
                            //nog steeds niet schrikken dit wordt nog erger
                            if (
                                (
                                    ($minuutS == $minuutE && ($minuutE == "" || $minuutE == $minuutN))
                                ||
                                    ($minuutS <= $minuutN && $minuutN <= $minuutE)
                                ||
                                    (
                                        (
                                            (
                                                $uurS==$uurE && $uurE == $dagS && $dagS == $dagE && $dagE==$maandS && $maandS == $maandE && $maandE == $jaarS && $jaarS == $jaarE && $jaarE == ""
                                            )
                                        ||
                                            ($uurN > $uurS ||
                                                ($uurN < $uurS &&
                                                    ($dagN > $dagS ||
                                                        ($dagN < $dagS &&
                                                            ($maandN > $maandS ||
                                                                (
                                                                    $maanN < $maandS && jaarN > $jaarS
                                                                )
                                                            )
                                                        )
                                                    )
                                                )
                                            )
                                        &&
                                            $minuutE < $minuutS &&
                                                (
                                                    (
                                                        $minuutS <= $minuutN &&    $minuutN <= 59
                                                    )
                                                ||
                                                    (
                                                        00 <= $minuutN && $minuutN <= $minuutE
                                                    )
                                                )
                                            )
                                        )
                                    )
                                )
                            {
                            if ($minuutN != $minuutE && $minuutN != $minuutS)
                            {
                                return true;
                            }
                            $secondeN = date("s",$time);
                            //nu mag je schrikken, maar het is nergens voor nodig,
                            // het is pas nodig als het niet werkt:P
                            if (
                                (
                                    (
                                        $secondeS == $secondeE &&
                                        (
                                            $secondeE == "" ||$secondeE==$secondeN
                                        )
                                    )
                                ||
                                    (
                                        $secondeS<=$secondeN && $secondeN<=$secondeE
                                    )
                                ||
                                (
                                    (
                                        (
                                            $minuutS == $minuutE
                                        &&
                                            minuutE == $uurS
                                        &&
                                            $uurS == $uurE
                                        &&
                                            $uurE == $dagS
                                        &&
                                            $dagS == $dagE
                                        &&
                                            $dagE == $maandS
                                        &&
                                            $maandS == $maandE
                                        &&
                                            $maandE == $jaarS
                                        &&
                                            $jaarS == $jaarE
                                        &&
                                            $jaarE == ""
                                        )
                                            ||
                                                (
                                                    $minuurN > $minuutS
                                                ||
                                                    (
                                                        $minuutN < $minuutS
                                                    &&
                                                        (
                                                            $uurN > $uurS
                                                        ||
                                                            (
                                                                $uurN < $uurS
                                                            &&
                                                                (
                                                                    $dagN > $dagS
                                                                ||
                                                                    (
                                                                        $dagN < $dagS &&
                                                                        (
                                                                            $maandN > $maandS
                                                                        ||
                                                                            (
                                                                                $maanN < $maandS && jaarN > $jaarS
                                                                            )
                                                                        )
                                                                    )
                                                                )
                                                            )
                                                        )
                                                    )
                                                )
                                                && $secondeE < $secondeS &&
                                                (
                                                    (
                                                        $secondeS <= $secondeN && $secondeN <= 59
                                                    )
                                                    ||
                                                    (
                                                        00 <= $secondeN && $secondeN <= $secondeE
                                                    )
                                                )
                                            )
                                        )
                                    )
                                )
                            {
                                //alle testen zijn met succes volbracht u mag door:p
                                $return = true;
                            }
                        }
                    }
                }
            }
        }
    }
    return $return;
}


Beetje lang, maar erg leuk ;).

Reageren