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

Modules Perl Discussion :

Comment comparer deux dates


Sujet :

Modules Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut Comment comparer deux dates
    J'ai une question que j'avais moi même posé il y a déjà un ans , mais je vous la repose parce que je ne sais pas ou j'ai mis le script .

    Comment faire pour comparer deux dates ? Le but c'est de comparer trouver si 30 jours ou plus ce sont écoulé entre ma date A et ma date B la date A étant la date du jour

    Merci.

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Au hasard ... Date::Calc ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    J'ai strictement rien pigé a a la doc de ce module

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Il n'y a strictement rien à "piger" dans ce module : c'est juste une collection de fonction pour faire divers calcul sur les dates, au final avec cet ensemble de fonctions on peut pratiquement tout faire en matière de calcul calendaire !

    Pour ton problème, la fonction suivante semble tout indiquée :
    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
     
    # ($year,$month,$day) = Add_Delta_Days($year,$month,$day, $Dd);
     
    This function has two principal uses:
     
    First, it can be used to calculate a new date, given an initial date and an offset (which may be positive or negative) in days, in order to answer questions like "today plus 90 days -- which date gives that?".
     
    (In order to add a weeks offset, simply multiply the weeks offset with "7" and use that as your days offset.)
     
    Second, it can be used to convert the canonical representation of a date, i.e., the number of that day (where counting starts at the 1st of January in 1 A.D.), back into a date given as year, month and day.
     
    Because counting starts at "1", you will actually have to subtract "1" from the canonical date in order to get back the original date:
     
      $canonical = Date_to_Days($year,$month,$day);
     
      ($year,$month,$day) = Add_Delta_Days(1,1,1, $canonical - 1);
     
    Moreover, this function is the inverse of the function "Delta_Days()":
     
      Add_Delta_Days(@date1, Delta_Days(@date1, @date2))
     
    yields "@date2" again, whereas
     
      Add_Delta_Days(@date2, -Delta_Days(@date1, @date2))
     
    yields "@date1", and
     
      Delta_Days(@date1, Add_Delta_Days(@date1, $delta))
     
    yields "$delta" again.
    L'emploi de cette fonction me paraît particulièrement simple. (N'oublie pas de l'importer, Date::Calc n'importe rien par défaut, heureusement vu la quantité de fonctions ! "use Date::Calc qw( Add_Delta_Days );").

    --
    Jedaï

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Alors il y a la solution Time::Local (bien que je persiste à croire que Date::Calc soit LA solution)

    Tu convertis tes dates en nombre de secondes depuis l'Epoch (instant conventionnel de l'origine des temps UNIX).

    Ensuite, tu fais tous les calculs que tu veux ...

    1 J = 24x3600 sec.
    30 J = 30 x 24 x 3600 sec.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  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 : 499 184
    Points
    499 184
    Par défaut
    je sais plus si le post existe encore, mais j'vais donné une soluce je crois :
    bon j'ai retrouvéun vieux script :
    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
    #!/usr/bin/perl -w
    ############### calcul date ##################
     
    use Date::Calc qw(:all);
    $nb= @ARGV; #DATE donnee en argument (ex: 1-2-2005)
    if ( $nb == 0 ) {
    ($j,$m,$a)=(localtime)[3,4,5];
    $m++;
    $a +=1900;
    } else {
    ($j,$m,$a) = split("-",$ARGV[0]);
    }
     
    ##############################
    print "aujourd'hui : $j/$m/$a\n";
     
    ($aa,$mm,$jj)= Add_Delta_Days($a,$m,$j,6);
    print "6 jours apres : $jj/$mm/$aa\n";
     
    ($aa,$mm,$jj)= Add_Delta_YM($a,$m,$j,-2,-6);
    print "2 ans et 6 mois avant : $jj/$mm/$aa\n";
     
    ($aaa,$mmm,$jjj)= Add_Delta_Days($a,$m,$j,1);
    print "demain : $jjj/$mmm/$aaa\n";

  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 : 499 184
    Points
    499 184
    Par défaut
    date::calc est la soluce,
    desole mon script ne fait pas exactement ce que tu veux, mais ça peux t'aider à comprendre le module

Discussions similaires

  1. comment compare deux date
    Par kanebody dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/09/2009, 00h33
  2. comment comparer deux dates
    Par smix13 dans le forum IHM
    Réponses: 1
    Dernier message: 26/01/2009, 14h37
  3. comment comparer deux date
    Par Melvine dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2007, 17h38
  4. Comment comparer deux date en SQL Server avec VB.NET
    Par Pedro Varela dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/09/2006, 15h26
  5. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

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