IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Comparaison de dates


Sujet :

Langage Perl

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut Comparaison de dates
    Bonjour

    J'ai une date de format YYYYMMDD (par exemple 20080214).

    Je voudrai faire une comparaison pour savoir si cette date est supérieure de 6 mois par rapport à la date d'aujourd'hui.
    J'ai voulu essayer le module DateTime mais il faut l'installer et là où je suis actuellement, ça ne sera pas autorisé.

    C'est mon 1er programme en perl et j'avoue que je galère bien. Je connais bien mieux le PHP.

    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Bonjour

    Merci pour le lien.

    Grace à ce lien, j'ai pu faire ce morceau de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    sub compareDate {
        my($dateDebut, $dateFin) = @_;
        #(3600 * 24) * 30 
        my $nbSecondPourSixMois = 2592000;
        print $dateDebut."\n";
        print $dateFin."\n";
        my @DateD;
        #jour
        $DateD[0] = substr($dateDebut, 6, 2);
        #mois
        $DateD[1] = (substr($dateDebut, 4, 2) - 1);
        #annee
        $DateD[2] = substr($dateDebut, 0, 4);
     
        my @DateF;
        #jour
        $DateF[0] = substr($dateFin, 6, 2);
        #mois
        $DateF[1] = (substr($dateFin, 4, 2) - 1);
        #annee
        $DateF[2] = substr($dateFin, 0, 4);
     
        my $timeLocalDateDebut = timelocal( 0,0,0, @DateD ),"\n";
        my $timeLocalDateFin = timelocal( 0,0,0, @DateF ),"\n";
        if(($timeLocalDateFin - $timeLocalDateDebut) >= $nbSecondPourSixMois) {
            print "La différence des dates sont différentes de plus de 6 mois.\n";
        }
        else {
            print "La différence des dates sont inférieures à plus de 6 mois.\n";
        }
    }
    La dateFin est en réalité la date d'aujourd'hui.
    Les dates que je reçois sont au format AAAAMMDD.

    Ce programme fait à peu près ce que je veux mais il n'est pas du tout précis, notamment du au fait que je considère qu'il y a 30 jours dans chaques mois.
    Pour calculer le nombre de secondes en 6 mois, je fais (3600 * 24) * 30. Ce qui n'est pas très précis.
    Y a t il un moyen d'améliorer mon script ?

    Merci.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Dans le lien que je t'ai filé, il y a des bout de codes faisans exactement ce que tu souhaites via l'utilisation de modules fait pour, relis le correctement.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Bonjour,
    J'ai bien lu ce passage mais il y a toujours un problème de précision.

    En effet je vais obtenir le nombre de jour. Mais si par exemple j'obtiens un résultat de 180 jours, comment savoir si c'est bien égal à 6 mois, sachant que certaines mois ont 30 jours, d'autres 31 et un qui varie (février)?

    En PHP, je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sDate = date("Ymd",mktime(0,0,0,date("m")-6,date("d"),date("Y")));
    N'y a t il pas un équivalent ?

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Faut prendre le temps de lire ce qu'on vous met à disposition .
    Tout est dans le lien. A vous ensuite de compléter votre lecture en regardant la documentation du module.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use Date::Calc qw(:all);
     
    my ($jour1,$mois1,$annee1) = split("/","28/05/2006");
    my ($jour2,$mois2,$annee2) = split("/","05/12/2008");
    my $Dd = Delta_Days(($annee1,$mois1,$jour1),($annee2,$mois2,$jour2) );
    my ($annee , $mois, $jours ) = Delta_YMD( ($annee1,$mois1,$jour1),($annee2,$mois2,$jour2) );
    print "$Dd jours entre 28/05/2006 et 05/12/2008\n";
    print "$jours jours, $mois mois , $annee annee entre 28/05/2006 et 05/12/2008\n";
    te retourne

    922 jours entre 28/05/2006 et 05/12/2008
    -23 jours, 7 mois , 2 annee entre 28/05/2006 et 05/12/2008

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use Date::Calc qw(:all);
    use POSIX;
     
    my $DateToday = POSIX::strftime "%d/%m/%Y", localtime;
    my ($jour1,$mois1,$annee1) = split("/",$DateToday);
     
    my $date_quelconque = '20080214';
    my ($annee2, $mois2, $jour2) = $date_quelconque =~ m{(\d{4})(\d{2})(\d{2})};
     
    my ($annee , $mois, $jours ) = Delta_YMD( ($annee1,$mois1,$jour1),($annee2,$mois2,$jour2) );
    print "Il y a $jours jours, $mois mois , $annee annee entre $DateToday et $date_quelconque\n";

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Merci

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Mon problème est résolu mais juste pour ma curiosité, quelqu'un peut m'expliquer comment fonctionne cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m{(\d{4})(\d{2})(\d{2})}
    A quoi correspond le m et le d ? J'ai supposé au début que m = month et d = day mais apparement, ce n'est pas ça.

    Merci

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($annee2, $mois2, $jour2) = $date_quelconque =~ m{(\d{4})(\d{2})(\d{2})};
    C'est une expression régulière :
    \d => un chiffre.
    \d{4} => cherche 4 chiffres qui se suivent.
    les parentheses => captures

    Il y en a 3, donc on les captures et les stocke dans ($annee2, $mois2, $jour2)

    Lit la FAQ pour en savoir plus.

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comparaison de dates javascript
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/07/2005, 08h45
  2. comparaison de dates
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2005, 16h12
  3. comparaison de date
    Par nickoshiba dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2005, 15h48
  4. Comparaison de dates
    Par Tapioca dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 15h55
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo