PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2025 → Fonction Age
Fonction Age
Débuté par priv!p106np6Msov06r4np6v8r+s4, 23 fév. 2025 21:32 - 8 réponses
Membre enregistré
8 messages
Posté le 23 février 2025 - 21:32
Bonjour

Sur une page, j'ai intégré un champs de saisie d'une date (de naissance). Que j'utilise la fonction Age en sortie de champs afin de savoir si la personne est majeure, avec certaines dates (comme par exemple 02/02/2001 ou 02/02/2002).

Mon code est le suivant en traitement de sortie de champs

SI SAI_naissance="" ALORS
SAI_naissance.CouleurFond=Blanc
FIN
SI DateValide(SAI_naissance) ALORS
monage est une Date = Age(SAI_naissance, DateDuJour)
SI monage.année<18 ALORS
SAI_naissance..CouleurFond=RougeClair
SINON
SAI_naissance.CouleurFond=VertClair
FIN
SINON
SAI_naissance=""
FIN


Le message d'erreur qui s'affiche est le suivant :
"localhost indique
Erreur dans le code navigateur :
Format invalide."

Avez-vous déjà eu ce type de soucis avec cette fonction ?






--
Frédéric Besnard
Membre enregistré
15 messages
Posté le 24 février 2025 - 13:41
Bonjour,

Je viens de tester votre code en 28, juste copier coller ça tourne au poil. J'ai un windows en français et le browser en français.

Le mieux reste de mettre un info ou une trace après le date Valide pour voir ?

Possible que votre date valide fonctionne en format "US", avec le mois et le jour inversé, mais la fonction AGE, elle n'accepte que des dates à la française ?

C'est le seul cas ou une date valide pourrait ne plus l'être lors que de la conversion de l'age.

EDIT : Je viens de tester la date du 15/12/1981, ca fonctionne, si j'inverse la date en format anglais, "19811512" au lieu de " 19811215" < là j'ai l'erreur que vous avez à l'identique.

Ponch
Message modifié, 24 février 2025 - 13:43
Membre enregistré
70 messages
Posté le 24 février 2025 - 14:11
Bonjour,

Le résultat de la fonction Age est une chaine de caractère (pas une date).
Ca peut aider d'affecter les bons formats, aussi...

Du coup, le test ensuite sera :
SI Val(monage) < 18 ALORS


--
Qui ne sait rien, de rien ne doute...
Membre enregistré
8 messages
Posté le 24 février 2025 - 18:35
Merci bcp pour vos réponses. Mais ça ne fonctionne pas, au bout de quelques saisies consécutives de dates différentes mais avec des chiffres répétitifs, je finis par avoir le même message d'erreur. J'ai volontairement réduit mon code, et l'erreur est toujours générée par le traitement juste après le "monage est une Date = Age(SAI_naissance, DateDuJour)". Le format

SI SAI_naissance="" ALORS
SAI_naissance.CouleurFond=Blanc
FIN
SI DateValide(SAI_naissance) ALORS
monage est une Date = Age(SAI_naissance, DateDuJour)
Info(monage.Année)
// SI val(monage)<18 ALORS
// info(monage)
// SAI_naissance..CouleurFond=RougeClair
// SINON
// SAI_naissance.CouleurFond=VertClair
// FIN
SINON
SAI_naissance=""
FIN

Afficher l'âge en années suffit à faire planter... si j'essaie par exemple avec une saisie 02 02 2002 ou 02 02 2001 ça plante systématiquement...
Je suis sous windows 10 en français avec un navigateur en français.

Mon SAI_naissance est paramétré comme suit :





--
Frédéric Besnard
Membre enregistré
8 messages
Posté le 24 février 2025 - 19:21
Et sans même utiliser le champs de saisie, si j'utilise un bouton sensé calculer et afficher l'âge entre "20010202" et la datedujour, ça plante encore et encore... par contre si je remplace '20010202' par "19740607" dans le code par exemple, ça fonctionne...











:-(

--
Frédéric Besnard
Membre enregistré
70 messages
Posté le 25 février 2025 - 15:30
Désolé pour ma réponse approximative...
J'ai pris quelques minutes pour tester et valider ma réponse :

SI DateValide(SAI_DateNaissance) ALORS
monage est une chaîne = Age(SAI_DateNaissance, DateDuJour())
SI Val(Gauche(monage,4)) < 18 ALORS
SAI_DateNaissance..CouleurFond=RougeClair
SINON
SAI_DateNaissance..CouleurFond=VertClair
FIN
FIN


--
Qui ne sait rien, de rien ne doute...
Message modifié, 25 février 2025 - 15:32
Membre enregistré
15 messages
Posté le 25 février 2025 - 15:49
Et sinon pourquoi vouloir continuer d'utiliser une fonction qui bug ?

Vous calculer le nombre de jour écoulé entre les deux dates, divisé par 365.25 pour gérer les années bisextiles.

MonAge est un entier = (DateVersEntier(DateSys)-DateVersEntier("20010202"))/365.25


Si vous ne souhaitez que l'age cette syntaxe fera le boulot à la perfection.

Sinon vous utilisez une variable de type durée et vous faite un dateHeuredifference pour récupérer le nombre d'année écoulé entre les deux dates
Message modifié, 25 février 2025 - 15:50
Membre enregistré
8 messages
Posté le 25 février 2025 - 21:30
Merci bcp pour vos réponses et votre aide précieuse, la fonction Age() m'aura bien fait perdre mon temps et mon énergie. Encore merci à tous :-)

--
Fred B.
Message modifié, 25 février 2025 - 21:32
Membre enregistré
15 messages
Posté le 26 février 2025 - 14:39
Mais de rien avec plaisir, il y a des fois on va plus vite à faire simple de 0, que d'essayer de débugger des choses auquel on a pas accès.

Pour ça que perso je n'utiliserais jamais d'IA pour m'assister en prog, je passerais plus de temps à débugger ces erreurs que de faire moi même de 0 en comprenant ce que je fais :)

Dans tous les cas bon développement !