J'ai l'impression de penser à la logique à chaque fois, alors prenez-en note.
! Start2.isAfter (end1)
par start2.isBefore (end1)
et ! End2.isBefore (start1)
par ʻend2.isAfter (start1) `. Faire. /**
*Vérifier les périodes en double(Version heure locale)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 10:00 ~ 11:00
*Période 2=> 11:00 ~ 12:00
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1 Fin de la période 1
* @param start2 Début de la période 2
* @param end2 Fin de la période 2
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalTime, end1: LocalTime, start2: LocalTime, end2: LocalTime): Boolean =
!start2.isAfter(end1) && !end2.isBefore(start1)
/**
*Vérifier les périodes en double(Version heure locale,Option de fin de période possible)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 10:00 ~ 11:00
*Période 2=> 11:00 ~ 12:00
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1Opt Fin de la période 1(Si aucun, la période cible depuis le début)
* @param start2 Début de la période 2
* @param end2Opt Fin de la période 2(Si aucun, la période cible depuis le début)
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalTime, end1Opt: Option[LocalTime], start2: LocalTime, end2Opt: Option[LocalTime]): Boolean =
end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))
/**
*Vérifier les périodes en double(Version de date locale)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 2020-10-01 ~ 2020-10-10
*Période 2=> 2020-10-10 ~ 2020-10-20
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1 Fin de la période 1
* @param start2 Début de la période 2
* @param end2 Fin de la période 2
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalDate, end1: LocalDate, start2: LocalDate, end2: LocalDate): Boolean =
!start2.isAfter(end1) && !end2.isBefore(start1)
/**
*Vérifier les périodes en double(Version de date locale,Option de fin de période possible)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 2020-10-01 ~ 2020-10-10
*Période 2=> 2020-10-10 ~ 2020-10-20
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1Opt Fin de la période 1(Si aucun, la période cible depuis le début)
* @param start2 Début de la période 2
* @param end2Opt Fin de la période 2(Si aucun, la période cible depuis le début)
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalDate, end1Opt: Option[LocalDate], start2: LocalDate, end2Opt: Option[LocalDate]): Boolean =
end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))
/**
*Vérifier les périodes en double(Version de LocalDateTime)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 2020-10-01 10:00:00 ~ 2020-10-10 20:00:00
*Période 2=> 2020-10-10 20:00:00 ~ 2020-10-20 20:00:00
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1 Fin de la période 1
* @param start2 Début de la période 2
* @param end2 Fin de la période 2
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalDateTime, end1: LocalDateTime, start2: LocalDateTime, end2: LocalDateTime): Boolean =
!start2.isAfter(end1) && !end2.isBefore(start1)
/**
*Vérifier les périodes en double(Version de LocalDateTime,Option de fin de période possible)
*Si les périodes se chevauchent en un seul point, elles sont également considérées comme se chevauchant.
* e.g.)
*Période 1=> 2020-10-01 10:00:00 ~ 2020-10-10 20:00:00
*Période 2=> 2020-10-10 20:00:00 ~ 2020-10-20 20:00:00
*résultat=>Il y a duplication(true)
*
* @param start1 Début de la période 1
* @param end1Opt Fin de la période 1(Si aucun, la période cible depuis le début)
* @param start2 Début de la période 2
* @param end2Opt Fin de la période 2(Si aucun, la période cible depuis le début)
* @retourne vrai si dupliqué
*/
def isOverlapped(start1: LocalDateTime, end1Opt: Option[LocalDateTime], start2: LocalDateTime, end2Opt: Option[LocalDateTime]): Boolean =
end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))