Comment vérifier si une période chevauche une autre période dans PHP Laravel
<p>Comment vérifier si les heures de travail d'un utilisateur spécifique pour une période donnée existent déjà dans la base de données. Par conséquent, la fonction doit renvoyer vrai lorsque les heures de travail chevauchent la date et l'heure données. Je l'ai essayé mais ça ne marche pas. </p>
<pre class="brush:php;toolbar:false;">fonction checkExistingWorkingHours($user_id, $start_date, $start_time, $end_date, $end_time)
{
// jj($user_id . " " . $start_date . " " . $start_time . " " . $end_date . " " . $end_time);
$startDateTime = Carbon::parse($start_date . ' ' . $start_time);
$endDateTime = Carbon::parse($end_date . ' ' . $end_time);
$overlapExists = WorkingHour::where('user_id', $user_id)
->where(function ($query) use ($startDateTime, $endDateTime) {
$query->where(function ($query) utiliser ($startDateTime, $endDateTime) {
// Vérifie le chevauchement là où start_datetime se situe entre start_datetime et end_datetime existants
$query->where(function ($query) utiliser ($startDateTime, $endDateTime) {
$query->where('start_date', '=', $startDateTime->format('Y-m-d'))
->where('start_time', '<', $endDateTime->format('H:i'))
->where('end_date', '=', $startDateTime->format('Y-m-d'))
->where('end_time', '>', $startDateTime->format('H:i'));
})->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) {
$query->where('start_date', '<', $startDateTime->format('Y-m-d'))
->where('end_date', '=', $startDateTime->format('Y-m-d'))
->where('end_time', '>', $startDateTime->format('H:i'));
});
})->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) {
// Vérifie le chevauchement là où end_datetime se situe entre start_datetime et end_datetime existants
$query->where(function ($query) utiliser ($startDateTime, $endDateTime) {
$query->where('start_date', '=', $endDateTime->format('Y-m-d'))
->where('end_date', '>=', $endDateTime->format('Y-m-d'))
->where('start_time', '<', $endDateTime->format('H:i'));
})->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) {
$query->where('start_date', '<=', $startDateTime->format('Y-m-d'))
->where('end_date', '>=', $endDateTime->format('Y-m-d'));
});
});
})->existe();
retourner $overlapExists ;
}</pré>
<p>Lorsque je teste la fonction avec les données suivantes, cela indique qu'il y a un chevauchement même s'il n'y en a pas.</p>
<p>Vérifiez les heures de travail existantes (1, 2023-06-01, 00:15, 2023-06-01, 03:00) ;</p>
<p>La valeur dans la base de données est le 01/06/2023 de 15h30 à 23h00. </p>