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 :

Date et ajout de mois


Sujet :

Modules Perl

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut Date et ajout de mois
    Bonjour, j'ai une date au format 'jj/mm/aaaa' et je souhaiterais ajouter 2 mois a cette date. J'aimerais savoir quelle librairie utiliser et comment faire.

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu veux dire incrémenter mm de 2 unités ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Si oui, une solution (pas optimisée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date =~ m/(\d+)\/(\d+)\/(\d+)/;
    $mois = $2 + 2;

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Merci, en fait j'ai fais un truc de ce genre qui ne doit pas non plus etre optimisé:

    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
    use DateTime;
     
    $date = '12/11/2006';
    $d = substr($date,0,2);
    $m = substr($date,3,2);
    $y = substr($date,6,4);
     
      my $dt1 =
        DateTime->new( year       => $y,
                       month      => $m,
                       day        => $d,
                       hour       => 0,
                       minute     => 0,
                       second     => 0,
                       nanosecond => 0,
                       time_zone  => "floating",
                      );
     
     
    $dt1->add(months => 2);
    $d = substr($dt1,0,4);
    $m = substr($dt1,5,2);
    $y = substr($dt1,8,2);
     
    print "$d\n";
    print "$m\n";
    print "$y\n";

  5. #5
    Invité
    Invité(e)
    Par défaut
    Les regex sont plus concises et rapides. A toi de voir.

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Oui mais avec ta regex, si tu ajoutes 2 au 12e mois tu obtiens 14 et non 2. Avec DateTime, ca t'evites de te taper ce probleme.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Il suffit de... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date =~ m/(\d+)\/(\d+)\/(\d+)/;
    $mois = ($2 + 2) % 12;

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Oui mais dans ce cas tu es aussi obligé d'incrémenter ton année. Il faut tout te taper a la main les exceptions: passage de mois d'année,... Je préfère utiliser cette librairie.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Comme tu veux... Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $date =~ m/(\d+)\/(\d+)\/(\d+)/;
    $mois = ($2 + 2) % 12;
    if ($2 > 10) {$an = $3 + 1;}

  10. #10
    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
    Les expressions rationnelles de Perl sont excessivement puissantes, et pratiques, mais il faut les utiliser pour ce qu'elles sont : des outils de mise en correspondance et de remplacement.

    Elles sont parfaites pour l'extraction des informations "atomiques" de la date (numéro du jour, numéro du mois, année), mais pour l'arithmétique sur les dates, j'aurai plus confiance dans un module, largement testé et répandu, plutôt que dans un calcul que je réaliserai moi-même, avec une gestion des exceptions qui risquerait d'être prise en défaut.

    Un 'mix' des deux solutions pourrait être un plus, en fiabilité comme en concision

    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
    32
    # Attention, non testé !!!
     
    use DateTime;
     
    $date = '12/11/2006';
    my ($d, $m, $y) = ($date =~ m#(\d+)/(\d+)/(\d+)#);
     
    my $dt1 = DateTime->new(year       => $y,
                            month      => $m,
                            day        => $d,
                            hour       => 0,
                            minute     => 0,
                            second     => 0,
                            nanosecond => 0,
                            time_zone  => "floating");
     
    $dt1->add(months => 2);
     
    # Là, pour l'extraction finale, je ne suis pas sûr de ce que Steph82 réalise ...
    # Extraction du jour sur 4 positions ??? Et de l'année sur 2 ???
    # $d = substr($dt1,0,4);
    # $m = substr($dt1,5,2);
    # $y = substr($dt1,8,2);
    #
    # J'aurai plutôt fait :
     
    my $newdate = $dt1->dmy('/');
    ($d, $m, $y) = ($newdate =~ m#(\d+)/(\d+)/(\d+)#;
     
    print "$d\n";
    print "$m\n";
    print "$y\n";
    Bonne journée.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  11. #11
    Invité
    Invité(e)
    Par défaut
    Ca, c'est de la modération...

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par kuzco
    Ca, c'est de la modération...
    Tout a fait d'accord avec toi

    Merci 2Eurocents, cette solution je pense est la plus efficace. Pour les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # Extraction du jour sur 4 positions ??? Et de l'année sur 2 ???
    # $d = substr($dt1,0,4);
    # $m = substr($dt1,5,2);
    # $y = substr($dt1,8,2);
    En fait, la date renvoyé est au format américain, c'est pour ca que je commence a partir de 0 et prend 4 caractères pour l'année et non le jour. A la place, je mettrais une autre regex pour récuperer les jours, mois et années de ma date.

    Encore merci.

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

Discussions similaires

  1. Publipostage champs DATE et ajouter des mois
    Par Slackk dans le forum Word
    Réponses: 1
    Dernier message: 05/04/2014, 13h58
  2. [Dates] ajouter des mois dans une date
    Par illegalsene dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2007, 14h41
  3. [Oracle] Comparaison de date et ajout de mois
    Par memed dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/06/2006, 13h56
  4. [Dates] Ajouter un mois à une date
    Par Higestromm dans le forum Langage
    Réponses: 8
    Dernier message: 17/01/2006, 15h27
  5. ajouter 1 mois à une date dans une requete
    Par alain.lc dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 04/04/2005, 12h05

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