J'ajoute juste ("erf, pas d'édition..."):
la fin du mois correspond au dernier jour du mois à 00h00 (donc le matin !).
Donc juste ajouter au message de 47 soit :
$where = "(event_date_debut >= '$sDebutMois' or addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= DATE_ADD('$sFinMois', INTERVAL 1 DAY)";
soit transformer :
$sFinMois = date('Y-m-d H:i:s', mktime(23, 59, 59, $_GET['m']+1, 0, $_GET['y']));
Je trouvais la seconde solution plus claire à relire donc voilà. Les deux se valent je pense... après en termes de performances je ne me prononcerait pas, je n'en sais fichtre rien).
pour ma récupération des jours occupés, j'ai fait un truc franchement tiré par les cheveux... (j'ai du mal à faire simple).
// on récupére le début et la fin du mois
$sDebutMois = date('Y-m-d H:i:s', mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']));
$sFinMois = date('Y-m-d H:i:s', mktime(23, 59, 59, $_GET['m']+1, 0, $_GET['y']));
//addtime ajoute un time à un timestamp
$where = "(event_date_debut >= '$sDebutMois' or addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= '$sFinMois'";
$sql ='SELECT
event_date_debut,
event_duree
FROM
evenements
WHERE
'.$where;
//connexion
bdconnect();
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//déclaration de l'array
$jours_busy = array();
while ($event = mysql_fetch_array($req))
{
$jourbusy[] = array(
'event_date_debut' => $event['event_date_debut'],
'event_duree' => $event['event_duree']);
//jr début evt : si jr dbt evt est avt jour début mois, alors == jr début mois
$jrDbtEvt =intval(
(strtotime($event['event_date_debut']) < mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']))
? date('d', mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']))
: date('d',strtotime($event['event_date_debut']))
);
//jr fin mois
$jrFinMois = intval(date('d', mktime(00, 00, 00, $_GET['m']+1, 0, $_GET['y'])));
//timstp fin evt
$timstp_fin_evt = strtotime($event['event_date_debut'])+transfo_duree_en_secondes($event['event_duree']);
//timestamp fin mois
$timstp_fin_mois = mktime(00, 00, 00, $_GET['m']+1, 0, $_GET['y']);
//jr fin evt : si jr fin evt est après jour fin mois, alors == jr fin mois
$jrFinEvt =intval(
($timstp_fin_evt > $timstp_fin_mois)
? date('d',$timstp_fin_mois)
: date('d',$timstp_fin_evt)
);
//pr jr = jour dbt evt ; jr<fin_mois ; jr dbt +1
while(($jrDbtEvt <= $jrFinMois) AND ($jrDbtEvt <= $jrFinEvt))
{
//$jours_busy[]= $jrDbtEvt;
if(!in_array($jrDbtEvt,$jours_busy))
{
$jours_busy[]= $jrDbtEvt;
}
$jrDbtEvt++;
}
}
mysql_free_result ($req);
je pense que je vais finalement créer dans ma table une colonne de fin d'evenement directement, renseignée au moment de l'enregistrement, celà simplifiera mes requêtes.
Sujet résolu ! Merci Encore !