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;
}