Alerte pour date de fête

[Résolu]
Signaler
Messages postés
4
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
31 décembre 2007
-
Messages postés
4
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
31 décembre 2007
-
Bonjour,
J'aimerais être éclairé;  J'ai une base de donnée en Access contenant un champ DOB, dont la date de naissance, ainsi que l'année de naissance d'une personne.
Ce que je veux faire avec mon programme en C#:  Lorsque je démarre le logiciel, faire une vérification et affichier toutes les personnes ayant leur anniversaire entre maintenant et dans 14 jours.  À partir de cette vérification, je n'y arrive plus.  Je ne peux comparer les dates, puisque les années diffères.  Je ne peux comparer les jours seuls, ou les mois seul, puisque si j'arrive avec un intervalle entre 29 décembre et 13 janvier, je ne peux vérifier >= 29 && <=13.  Je ne sais plus quoi faire ....

Merci de votre aide

Max

6 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
34
Salut

Dans ce cas, il faut utiliser un modulo 365 (les années bisexitiles on peut passr c'est pas important)

360 + 15 modulo 365 --> 10 (ie ca retranche 365)

Et tu prends le max - le min et tu peux comparer.
Sinon tu retranche directement 365 et tu compares

Ca doit pas etre compliqué.

Bon courage
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
En C#:

public
class
Program
{
  
public
static
void Main(
string[] args)
   {
     
// Au 31 d‚cembre 2007
      Console.WriteLine(HasBirthday(
new
DateTime(2008, 1, 5), 14));
// True
      Console.WriteLine(HasBirthday(
new
DateTime(2008, 1, 15), 14));
// False
   }

  
public
static
bool HasBirthday(
DateTime birthDate)
   {
     
return HasBirthday(birthDate, 0);
   }

  
public
static
bool HasBirthday(
DateTime birthDate,
int precision)
   {
     
return
Math.Abs(
DateTime.Now.Subtract(birthDate).TotalDays) <= precision;
   }
}

<hr />
-My Blog-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
34
salut

tu convertit en numero du jour dans l'anée
1-1 --> 1

31-1-->31
1-2 --> 32

SELECT CLng(CLng([madate])-DateSerial(Year([madate]),1,1)+1) AS jouran FROM matable;

(non testé)

et apres un between avec un +14

bon courage
Messages postés
4
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
31 décembre 2007

Bonjour :)

Merci pour votre question.
La difficulté que je rencontre avec cette méthode est à la fin de l'année, lorsque je vais tomber entre, par exemple, entre le 360 ieme jours et le 10jours de l'année d'ensuite.
Si l'anniversaire est le 5 janvier,  la comparaison BETWEEN entre 360 et 10 ne fonctionne pas ? Soit tous les jours entre le 10 et le 360 existe, ou soit le BETWEEN est faussé entre 360 et 10.

Merci
Messages postés
4
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
31 décembre 2007

Merci beaucoup pour votre réponse, elle ma beaucoup éclairée.
Messages postés
4
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
31 décembre 2007

Très belle méthode ! Merci!  Je crois que je vais utiliser cette méthode.

Un ami m'a envoyé une requête pour access, elle semble marcher la majorité du temps, mais si je met ma date au 01/01/08, la requete me sort une date du 31/12/07.
J'ai un peu de difficultés la seconde partie du where, avec le >=351 et <=365   Je comprend la première partie, pour que le nombres de jours soit entre 0 et 14.  Mais je ne comprend pas le pourquoi du entre 351 et 365

SELECT tableClient.*
FROM tableClient
where
(datediff('d', dateadd('yyyy', datediff('yyyy', anniversaireClient, now()), anniversaireClient), now()) <= 14
and
datediff('d', dateadd('yyyy', datediff('yyyy', anniversaireClient, now()), anniversaireClient), now()) >= 0)
or
(datediff('d', dateadd('yyyy', datediff('yyyy', anniversaireClient, now()), anniversaireClient), now()) >= 351
and
datediff('d', dateadd('yyyy', datediff('yyyy', anniversaireClient, now()), anniversaireClient), now()) <= 365)