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 :

Trouver le 1er et dernier jour du mois


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 28
    Points
    28
    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

  2. #2
    Nouveau membre du Club Avatar de zanker
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    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 : 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
    #!/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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Nouveau membre du Club Avatar de zanker
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Furil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 "++".

    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour,


    Je passe le sujet en résolu.

    Encore merci pour l'aide et bonne journée.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/08/2013, 16h59
  2. Connaitre 1er et dernier jour du mois d'une date donnée
    Par kerido dans le forum Général Java
    Réponses: 4
    Dernier message: 14/05/2012, 14h18
  3. Trouver le dernier jour du mois
    Par Zebulon777 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 04/05/2011, 15h42
  4. Trouver dernier jour du mois
    Par Mimiche dans le forum Langage
    Réponses: 9
    Dernier message: 09/01/2008, 16h28
  5. Objet personnel - Calcul 1er et dernier jour du mois
    Par amiral59 dans le forum Deski
    Réponses: 8
    Dernier message: 26/04/2007, 08h42

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