Bonjour,
Pour une fois que j'ai un public, j'en profite...
Je comprends effectivement la démarche et reconnais bien ces notions de "semaines" ou de "mois" qu'on trouve dans de nombreuses dispositions légales, mais qui à l'usage deviennent plus difficiles à manipuler dès qu'on les confronte à notre réalité faite de jours...
Si je me trouvais face à ce que tu veux faire, je crois que ma réflexion s'opèrerait autour de deux contraintes :
- d'abord, je ne crois pas que je transformerais les semaines en mois ni les mois en années ; je stockerais le tout sous sa forme initiale et je ressortirais l'information brute, sans transformation ; ce n'est pas obligatoirement la même signification d'avoir pris 2 mois de suspension ou d'avoir accumulé 1 mois et 4 semaines ; dans le premier cas, on peut supposer que c'est une grosse faute qui a été commise alors que dans l'autre, on a quelqu'un qui est un peu un multi-récidiviste (il a peut-être pris une fois un mois pour une faute importante et 4 fois une semaine ou une fois 2 semaines et 2 fois une semaine pour des fautes moins importantes mais néanmoins existantes) ; perso, je ne verrais pas de mal à évoquer un total de "2 mois et 13 semaines de sanction disciplinaire" plutôt que 5 mois et 1 semaines ;
- en second lieu, pour la saisie, je créerais un formulaire avec un champ pour les semaines, un autre pour les mois et un autre pour les années mais je ferais en sorte de stocker le tout dans un champ unique de la base, sans rien perdre de la précision initiale (donc sans transformation des semaines en mois ou l'inverse).
Pour réaliser le deuxième point (le stockage des mois/semaines/années) dans un champ unique de la BD, j'ai une recette ; elle n'est pas transposable de manière universelle mais pour le ,domaine que tu évoques, elle peut tout à fait convenir : en fait, je en sorte de stocker tout ça sous la forme d'un nombre entier dont chaque chiffre serait le compteur des années/mois/semaines ; par exemple 218 signifierait 2 ans, 1 mois et 8 semaines ; évidemment, tu me diras que si la personne en question se prend plus de 9 semaines, on est ennuyé, vu qu'on ne sait pas si 2113 signifie 2 ans 1 mois et 13 semaines ou 2 ans 11 mois et 3 semaines... Mais ce n'est pas un problème : il suffit de multiplier pour aboutir à un grand entier mais qui ne pose aucun doute ; par exemple, on peut imaginer que peut de monde atteindrait un cumul de 1.000 semaines de sanctions ; donc, on peut multiplier le nombre de moi par 1.000 en étant certain que que le chiffre des milliers indiquera des mois et non une quelconque partie des semaines ; de la même façon, je ne pense pas qu'il faille s'attendre à ce qu'un individu (de nature humaine, bien sûr) aille cumuler plus de 99 mois de sanctions disciplinaires ; auquel cas, il suffirait de multiplier le nombre d'années par 100.000 (les 1.000 appliqués aux signifiants des mois et les 100 supplémentaires propres aux signifiants des années), voire par 1.000.000 si on veut vraiment être certain, ou bien qu'on craint de faire face à une autorité prononçant des sanctions sans toutefois jamais exclure définitivement, ou bien encore si simplement on veut être un peu cohérent et se dire que chaque série de 3 chiffres dans le nombre se rapporte à une unité de temps différente (les millions pour les années, les milliers pour les mois et les unités pour les semaines) ; ou on peut aussi imaginer que le cumul ne se fera pas obligatoirement pour un individu mais qu'une volonté d'étude statistique pourra conduire à vouloir déterminer la durée des sanctions prononcées par l'autorité dans un laps de temps et auquel cas, la relation aux limites propres à un individu saute et il faut prévoir une échelle plus grande et un plus grand entier.
En tout cas, quel que soit le choix opéré, on se retrouve avec des nombres manipulables mathématiquement, regroupés dans un seul champ de la base et dont on peut extraire la signification par un simple calcul mathématique, avec des [floor(x)] pour obtenir la partie entière d''un nombre (en l'occurrence, c'est la partie entière d'une division par 1.000.000 ou 1.000 qui nous intéressera), des [mod(x,a)] pour obtenir le reste d'une division de "x" par "a", où les "a" en question serait, ici aussi, 1.000.000 ou 1.000 et des combinaisons de deux.
Là je vais déjeuner mais je pourrai développer plus si besoin.
A+