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.
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.
Tu veux dire incrémenter mm de 2 unités ?
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;
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";
Les regex sont plus concises et rapides. A toi de voir.
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.
Il suffit de... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $date =~ m/(\d+)\/(\d+)\/(\d+)/; $mois = ($2 + 2) % 12;
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.
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;}
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
Bonne journé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
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";
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
Ca, c'est de la modération...
Tout a fait d'accord avec toiEnvoyé par kuzco
Merci 2Eurocents, cette solution je pense est la plus efficace. Pour les
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.
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);
Encore merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager