Précédent   Forum des professionnels en informatique > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 19h31   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 2
Points : 2
Par défaut Trouver le 1er et dernier jour du mois

Bonsoir,

Voilà à partir d'une date(localtime), je dois déduire le premier et le dernier jour du mois précédent.

Exemple 1:

Date : 06/08/2012
1er jour du mois M-1 : 01/07/2012
dernier jour du mois M-1 : 31/07/2012

Exemple 2:

Date : 04/01/2012
1er jour du mois M-1 : 01/12/2011
dernier jour du mois M-1 : 31/12/2011

Pour effectuer cette action j'ai choisi le module : Date::Manip

J'ai lu la documentation qu'il y a dessus et j'avoue ne pas tout comprendre

Ai-je fait le bon choix? si oui une piste sur comment obtenir cela ?

Je fais d'autres script utilisant ce module histoire d'en voir le plus de points possible.

Merci et bonne soirée
Furil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 11h19   #2
Membre à l'essai
 
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 23
Points : 23
Tes calculs sont très simples pour ne pas avoir besoin d'utiliser le module Date::Manip.
Et j'utilise le module Time::Local pour construire les nouvelles dates.

Voici un exemple:
Code :
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
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
 
sub printDate
{        my ($day, $month, $year) = @_ ;
        print(sprintf("%02s/%02s/%s\n", ($day, $month+1, $year+1900)));
}
 
# Aujourd'hui ...
my ($mday,$mon,$year) = (localtime(time))[3..5];
printDate($mday,$mon,$year);
 
# Le 1er du mois courant ...
my $first_M = timelocal(0, 0, 0, 1, $mon, $year);
printDate(1,$mon,$year);
 
# Le dernier du mois précédent ...
my $last_M_1 = $first_M - 2*60*60; # $first_M = 1er du mois à 0h00 => Au cas où changement d'horaire, soustraire 2h00 suffit
($mday,$mon,$year) = (localtime($last_M_1))[3..5];
printDate($mday,$mon,$year);
 
# Le 1er du mois précédent ...
#my $first_M_1 = timelocal(0, 0, 0, 1, $mon, $year);
printDate(1,$mon,$year);
Le résultat:
Code :
1
2
3
4
10/02/2012
01/02/2012
31/01/2012
01/01/2012
Et ça fonctionne aussi avec tes exemples.
Bonne journée.
zanker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 17h12   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 2
Points : 2
Bonjour,

Tout d'abord merci d'avoir répondu mais j'aurai 2-3 questions afin de tout comprendre :

Code :
1
2
 my ($day, $month, $year) = @_ ;
        print(sprintf("%02s/%02s/%s\n", ($day, $month+1, $year+1900)));
Concernant le $month+1

Dans ce genre de script le premier mois de l'année ne prend t'il pas pour valeur 0 et le dernier 11? Comment se fait t'il que cela n'ait pas d'influence sur ce changement? je me trompe peut-être mais c'est pour être sûr de tout avoir compris

Ensuite pour $year+1900
J'ai remarqué que si l'on change ce paramètre, l'affichage de l'année est faussé pourrais-tu me dire pourquoi 1900 précisément ?


C'est certainement des questions bêtes, mais au moins j'en apprendrai plus.

Encore merci et bonne journée
Furil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 10h04   #4
Membre à l'essai
 
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 23
Points : 23
Citation:
Envoyé par Furil Voir le message
Code :
1
2
 my ($day, $month, $year) = @_ ;
        print(sprintf("%02s/%02s/%s\n", ($day, $month+1, $year+1900)));
Concernant le $month+1

Dans ce genre de script le premier mois de l'année ne prend t'il pas pour valeur 0 et le dernier 11? Comment se fait t'il que cela n'ait pas d'influence sur ce changement? je me trompe peut-être mais c'est pour être sûr de tout avoir compris
  • Tu as raison, le mois de "Janvier" correspond à la valeur "0" renvoyée par "localtime()". Donc $month est compris entre 0 et 11 puisque je le récupère directement de la fonction "localtime()" sans le modifier.
  • "... sur ce changement" => C'est faux, il n'y a aucun changement sur la variable $month. Je ne lui ai pas affecté de nouvelle valeur avec l'opérateur d'affectation "=", et je n'ai pas utilisé, non plus, l'opérateur d'incrémentation "++".
Citation:
Ensuite pour $year+1900
J'ai remarqué que si l'on change ce paramètre, l'affichage de l'année est faussé pourrais-tu me dire pourquoi 1900 précisément ?

C'est certainement des questions bêtes, mais au moins j'en apprendrai plus.

Encore merci et bonne journée
  • Voir la fonction localtime() Perl.
zanker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 08h55   #5
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 2
Points : 2
Bonjour,


Je passe le sujet en résolu.

Encore merci pour l'aide et bonne journée.
Furil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h43.


 
 
 
 
Partenaires

Hébergement Web