[Résolu] Comparer 2 dates

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Comparer 2 dates

Message par Micoute »

Bonjour à tous,

j'aimerais savoir, comment on peut comparer 2 dates pour voir si elles plus grandes ou plus petites, enfin vous m'avez compris.

je vous remercie par anticipation pour votre aide.
Dernière modification par Micoute le sam. 14/nov./2015 14:41, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Comparer 2 dates

Message par Kwai chang caine »

Pour savoir si une date est plus grande que l'autre, ou les comparer, ce ne doit pas être trop compliqué.
Car en lisant la doc tu t'apercois que le chiffre obtenu avec l'instruction Date () est un nombre grandissant par rapport aux secondes écoulés
www.purebasic.com/french/documentation/date/index.html
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Comparer 2 dates

Message par MLD »

Salut Micoute

Regarde ceci

Code : Tout sélectionner

        ;Calcul du nombre de jours par rapport au premier janvier de la date
Procedure nbjanvier(ldate.s) 
    nbmois.s = "0,31,59,90,120,151,181,212,243,273,304,334"
    j =Val( StringField(ldate,1,"/"))
    m = Val(StringField(ldate,2,"/"))
    a = Val(StringField(ldate,3,"/"))
    nbjanvier =Val(StringField(nbmois,m,",") )+ j - 1
    If (bissextile(a) And m > 2)
        nbjanvier = nbjanvier + 1
    EndIf
    ProcedureReturn nbjanvier
EndProcedure
        
        ;Calcul du nombre de jours entre deux dates
Procedure nbjour(date1.s, date2.s) 
    nbjour = nbjourannee(date1.s, date2.s) - nbjanvier(date1.s) + nbjanvier(date2.s)
    ProcedureReturn nbjour
EndProcedure
        
        ;Exemple d utilisation :
Debug " Le nombre de jours entre les deux dates est : " +Str( nbjour("1/1/2010","16/1/2010"))


Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Comparer 2 dates

Message par Marc56 »

Bonjour Micoute,

Dans beaucoup d'OS (DOS, Windows) la date est stockée (y compris dans le BIOS) comme un nombre qui représente les secondes écoulées depuis le 1° janvier 1970.
(C'est pour cela qu'une carte mère plus alimentée et qui n'a plus de pile revient (souvent) au 01/01/1970)

Tous les environnement de programmation ont des fonctions pour convertir cette date dans un sens et dans l'autre.

En PB,
Parsedate pour convertir la date lisible en un nombre
http://www.purebasic.com/french/documen ... edate.html

Puis tu fais une simple soustraction des deux nombres.

Formatdate pour faire l’opération inverse
http://www.purebasic.com/french/documen ... tdate.html

Pas besoin de t'occuper des années bissextiles, tout est prévu.
:wink:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comparer 2 dates

Message par Micoute »

Ok, merci beaucoup à tous, pour ces renseignements qui me sont bien utiles.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: [Résolu] Comparer 2 dates

Message par Fig »

Tu peux comparer les valeurs retournées par ParseDate("%yy/%mm/%dd", "10/01/07").

Code : Tout sélectionner

If ParseDate("%yy/%mm/%dd", "11/01/15")>ParseDate("%yy/%mm/%dd", "10/01/15")
  Debug "la premiere date est plus grande"
Else
  Debug "la premiere date est plus petite"
EndIf
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Comparer 2 dates

Message par Micoute »

Bonjour Fig, ce serait bien génial si la situation se présenterait toujours comme ça.

En fait, je veux faire une liste de rendez-vous où chaque rendez-vous doit s'afficher si la date du dit rendez-vous est dans le futur par rapport à aujourd'hui.

Grand merci tout de même pour ton astuce qui en fait va me servir aussi.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: [Résolu] Comparer 2 dates

Message par Marc56 »

Micoute a écrit :En fait, je veux faire une liste de rendez-vous où chaque rendez-vous doit s'afficher si la date du dit rendez-vous est dans le futur par rapport à aujourd'hui.
1. Tu transformes toutes tes dates ET la date du jour en un numéro avec Parsedate()
2. Toutes les dates dont le numéro est supérieur au numéro de la date du jour sont donc dans le futur.

Avec la fonction AddDate(), tu peux même n'afficher par exemple que ceux qui ont lieu la semaine prochaine.

http://www.purebasic.com/french/documen ... ddate.html
Toutes les fonctions liées à la date
http://www.purebasic.com/french/documen ... index.html

Même les tableurs travaillent avec la date en format 'secondes depuis 1970', la conversion n'est faite que pour l'affichage utilisateur.

Maintenant, si tu veux te faire un système de gestion de RDV simple, deux méthodes:
- Stocker les données dans un fichier texte, alors le mieux est de mettre la date en début de ligne et au format AAAAMMJJ-HHMMSS , cela permet de lire le fichier simplement avec un éditeur de texte. En plus, cela permet de classer les RDV par date dans un tableur ou avec un éditeur de texte.
ou
- Stocker les données dans une base de données en utilisant le champs date. Celui-ci permet ensuite de faire des calculs de date automatiquement.

:wink:
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: [Résolu] Comparer 2 dates

Message par Fig »

Je ne vois pas quel est le probleme du coup.

Tu stock tous tes rendez vous en format numérique, ce qui te permet d'en trier l'affichage.
Quand tu dois les afficher, tu leurs donne le format string de ton choix avec formatdate()

Code : Tout sélectionner

NewList Rendezvous.i()
;créer 20 date de rendez vous avant ou apres la date du jour
For i=1 To 20
  AddElement(Rendezvous())
  If Random(2)>1
  Rendezvous()=Date()+Random(10)*100000 ;ou 
Else
  Rendezvous()=Date()-Random(10)*100000
EndIf
Next i

;trie les rendez vous dans l'ordre chronologique
SortList(Rendezvous(),0) ;en option

;affiche seulement les rendez vous dans le futur
ForEach Rendezvous()
  If Rendezvous()>=Date()
    Debug FormatDate("%dd/%mm/%yyyy",Rendezvous())
  EndIf
Next
>Marc a été plus rapide que moi...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Comparer 2 dates

Message par Micoute »

Ok, mais les deux sont bons et compatibles, alors merci à tous les deux.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre