1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| <?php
function analyseHours($datedebx,$heuredeb,$heurefin,$debnuit,$finuit,$jours_feries)
{
$dates = explode(" to ", $datedebx);
$deb = trim($dates[0]);
$fin = trim($dates[1]);
$datedeb_obj = DateTime::createFromFormat("d-m-Y", $deb);
$datefin_obj = DateTime::createFromFormat('d-m-Y', $fin);
$heuredeb_obj = DateTime::createFromFormat('H:i', $heuredeb);
$heurefin_obj = DateTime::createFromFormat('H:i', $heurefin);
$date_debut = $datedeb_obj->format('d/m/Y');
$heure_debut = $heuredeb_obj->format('H:i');
$date_fin = $datefin_obj->format('d/m/Y');
$heure_fin = $heurefin_obj->format('H:i');
$heure_normales = new DateTime('00:00');
$heure_supplementaires = new DateTime('00:00');
if ($heurefin_obj < $heuredeb_obj) {
$heure_normales = $heure_normales->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '23:59')));
if ($heure_normales->format('H') < 8) {
$heure_normales = $heure_normales->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '08:00')));
}
if ($heuredeb_obj->format('H') >= 9) {
$heure_supplementaires = $heure_supplementaires->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '09:00')));
}
$heure_supplementaires = $heure_supplementaires->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '05:59')));
$heure_supplementaires = $heure_supplementaires->add(DateTime::createFromFormat('H:i', '00:01')->diff($heurefin_obj));
if ($heuredeb_obj->format('H') >= $debnuit || $heurefin_obj->format('H') <= $finuit) {
$type_heure = 'Nuit';
} else {
$type_heure = 'Jour';
}
} else {
$heure_normales = $heure_normales->add($heuredeb_obj->diff($heurefin_obj));
if ($heure_normales->format('H') < 8) {
$heure_supplementaires = $heure_supplementaires->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '08:00')));
}
if ($heuredeb_obj->format('H') >= 9) {
$heure_supplementaires = $heure_supplementaires->add($heuredeb_obj->diff(DateTime::createFromFormat('H:i', '09:00')));
}
$heure_supplementaires = $heure_supplementaires->add($heuredeb_obj->diff($heurefin_obj));
if (($heuredeb_obj->format('H') >= $debnuit && $heuredeb_obj->format('H') <= 23) || ($heurefin_obj->format('H') >= 0 && $heurefin_obj->format('H') <= $finuit)) {
$type_heure = 'Nuit';
} else {
$type_heure = 'Jour';
}
}
$date_heures_supp = $datefin_obj->format('d-m-Y');
if (in_array($date_heures_supp, $jours_feries)) {
$type_jour = 'Férié';
} else {
$type_jour = 'Normal';
}
$jour_semaine = $datefin_obj->format('N');
$est_weekend = ($jour_semaine >= 6);
$resultat = [
'date_debut' => $date_debut,
'heure_debut' => $heure_debut,
'date_fin' => $date_fin,
'heure_fin' => $heure_fin,
'heure_normales' => $heure_normales->format('H:i'),
'heure_supplementaires' => $heure_supplementaires->format('H:i'),
'type_heure' => $type_heure,
'type_jour' => $type_jour,
'semaine' => ($est_weekend ? 'Weekend' : 'Normal')
];
return $resultat;
}
$datedebx = '26/06/2023 to 28/06/2023';
$heuredeb = '18:00';
$heurefin = '05:00';
$r = analyseHours($datedebx,$heuredeb,$heurefin);
print_r($r); |
Partager