Alerte pour date de fête [Résolu]

Nightwulf 4 Messages postés mercredi 2 novembre 2005Date d'inscription 31 décembre 2007 Dernière intervention - 30 déc. 2007 à 07:34 - Dernière réponse : Nightwulf 4 Messages postés mercredi 2 novembre 2005Date d'inscription 31 décembre 2007 Dernière intervention
- 31 déc. 2007 à 20:28
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 31 déc. 2007 à 11:33
3
Merci
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

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 31 déc. 2007 à 20:01
3
Merci
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-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de cs_Bidou
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 31 déc. 2007 à 01:20
0
Merci
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
Commenter la réponse de nhervagault
Nightwulf 4 Messages postés mercredi 2 novembre 2005Date d'inscription 31 décembre 2007 Dernière intervention - 31 déc. 2007 à 04:15
0
Merci
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
Commenter la réponse de Nightwulf
Nightwulf 4 Messages postés mercredi 2 novembre 2005Date d'inscription 31 décembre 2007 Dernière intervention - 31 déc. 2007 à 17:21
0
Merci
Merci beaucoup pour votre réponse, elle ma beaucoup éclairée.
Commenter la réponse de Nightwulf
Nightwulf 4 Messages postés mercredi 2 novembre 2005Date d'inscription 31 décembre 2007 Dernière intervention - 31 déc. 2007 à 20:28
0
Merci
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)
Commenter la réponse de Nightwulf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.