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 :

Calculer le nombre de jours restant suivant un évènement précis


Sujet :

Langage Perl

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Calculer le nombre de jours restant suivant un évènement précis
    Bonjour,

    Je désire écrire un petit script perl utilisé pour afficher le nombre de jours restant avant la sortie d'une nouvelle version du système d'exploitation OpenBSD, en sachant que le projet OpenBSD sort une nouvelle RELEASE tous les six mois. Actuellement, il reste 28 jours avant la version 4.3.

    Le soucis que je vais rencontré concernant le mois de février 28/29 jours

    Pouvez-vous me donner des idées pour que je puisse commencer ?

    Merci d'avance

  2. #2
    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
    Pourquoi ne pas tout simplement utiliser DateTime ? Franchement, gérer les dates soi-même c'est difficile en général et pas très amusant, il y a de très bonnes librairie pour faire ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use strict; use warnings;
    use DateTime;
    use DateTime::Event::Recurrence;
     
    # releases le 1er mai et le 1er novembre de chaque année.
    my $openBSD_releases = DateTime::Event::Recurrence->yearly( months => [5,11], days => 1);
     
    my $today = DateTime->today();
    my $time_until_next = $openBSD_releases->next( $today ) - $today;
     
    print "Nombre de jours avant la prochaine sortie d'OpenBSD : ", $time_until_next->in_units('days'), "\n";
    --
    Jedaï

  3. #3
    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
    Citation Envoyé par Olivier Regnier Voir le message
    Actuellement, il reste 28 jours avant la version 4.3.
    Du 12 avril au 1er mai, il n'y a a priori que 19 jours.

    --
    Jedaï

  4. #4
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Je vais regarder le code cet après midi. Il est plus court que je pensais

    J'ai récupéré le paquet mais j'obtiens des erreurs

    Il manque un fichier Validation.pm qui ne se trouve pas dans l'archive puis je ne peux pas effectuer l'installation car mon site est hébergé chez OVH

    Citation Envoyé par Jedai Voir le message
    Du 12 avril au 1er mai, il n'y a a priori que 19 jours.
    Oui, tu as raison, je ne sais plus compter

    Merci beaucoup

  5. #5
    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
    Attends trois secondes, comment as-tu installé DateTime si tu ne peux pas installer de modules ?
    Tu n'as pas d'accès SSH ? Quel est ton type d'hébergement ?

    Si tu ne peux vraiment pas installer de modules, il y a une solution moins claire à base de Time::Local et localtime() (tous dans le CORE), mais ce serait dommage de se passer de DateTime, qui est vraiment un excellent module de gestion de dates.

    --
    Jedaï

  6. #6
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Mon hébergement est un 60gp donc pas d'accès SSH

    Pour tester, j'ai juste copier via FTP les paquets demandés

  7. #7
    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
    Je te donne l'autre solution, mais essaie tout de même de voir si tu ne peux pas installer DateTime (et je veux dire vraiment l'installer, avec ses dépendances).

    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
    #!/usr/bin/perl
    use strict; use warnings;
    use Time::Local;
     
    my $now = time();
    my (undef,undef,undef,undef,$now_month,$now_year) = localtime();
     
    my $next_release;
    if( $now_month < 4 ) {
      $next_release = timelocal( 0,0,0,1,4,$now_year );
    }
    elsif ( $now_month > 9 ) {
      $next_release = timelocal( 0,0,0,1,4,$now_year+1 );
    }
    else {
      $next_release = timelocal( 0,0,0,1,10,$now_year );
    }
     
    my $days_until_next = int( ($next_release - $now) / (60*60*24) ) + 1;
     
    print "Nombre de jours avant la prochaine sortie d'OpenBSD : ", $days_until_next, "\n";
    --
    Jedaï

  8. #8
    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
    Citation Envoyé par Olivier Regnier Voir le message
    Pour tester, j'ai juste copier via FTP les paquets demandés
    Mouais, ça va pas trop marcher ça... Y a trop de dépendances à installer, et probablement des compilations à effectuer dans le tas (pas sûr).

    --
    Jedaï

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Merci et encore merci, c'est impeccable, le script fonctionne

  10. #10
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Je souhaiterai ajouter deux fonctionnalités supplémentaires à ce script. Tous les 1er mai et novembre, incrémenter de 1 la version actuelle, soit 4.2 à 4.3, etc.

    J'obtiendrai en sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    again 18 days until the 4.3-RELEASE of OpenBSD!
    J'ai pensé également à une autre idée. Lorsqu'une release va sortir, le projet OpenBSD met à disposition une page descriptive toujours nommée de la même façon à savoir 42.html, 43.html.

    J'aimerai par le biais de ce script vérifier si la page correspondant à la version future existe ou pas et si oui dans ce cas, le 4.3-RELEASE se transforme en un lien cliquable vers cette page.

    Pensez-vous que cela soit difficile à réaliser ?

    Merci

  11. #11
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'avance doucement

    Je tente de gérer l'évolution des release dans un fichier de texte.
    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
    my $release_logfile='/home.10.16/oregnier/cgi-bin/log/release.log';
    my $start_release=43;
    my $release_number;
     
    if (! -e $release_logfile)
    {
        open (my $FILE,">> $release_logfile");
        print $FILE $start_release;
        close $FILE;
    }
    else
    {
        open (my $FILE,"$release_logfile");
        $release_number=<$FILE>;
        close $FILE;
    }
     
    if ($days_until_next==0)
    {
        open (my $FILE,"+< $release_logfile");
        $release_number=<$FILE>;
        close $FILE;
     
        $release_number=~ s/\s+$//;
        $release_number++;
     
        open (my $FILE,"> $release_logfile");
        print $FILE $release_number;
        close $FILE;
    }
    Le soucis, le jour J, le numéro de version va augmenter de 1 oui mais à chaque fois que je vais rafraîchir la page, je voudrais que ce test s'exécute une seule fois

  12. #12
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'aimerai par le biais de ce script vérifier si la page correspondant à la version future existe ou pas et si oui dans ce cas, le 4.3-RELEASE se transforme en un lien cliquable vers cette page.
    J'ai réussi à coder cette partie:
    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
    #!/usr/bin/perl -w
     
    use strict;
    use diagnostics;
    use warnings;
    use CGI qw(:standard);
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
    use LWP::Simple;
     
    $CGI::POST_MAX=1024*100;
    $CGI::DISABLE_UPLOADS=1;
     
    my $cgi=new CGI;
    my $release="43";
     
    print "Content-type: text/html\n\n";
     
    my $release_url="http://www.openbsd.org/$release.html";
     
    if (head($release_url))
    {
        print $cgi->a({-href=>$release_url},"$release-RELEASE")."\n";
    }
    else
    {
        print "$release-RELEASE";
    }
    Dans un premier temps, qu'en pensez-vous ?

    Puis auriez-vous une idée pour le premier point, gérer la release ?

    Merci d'avance

    PS: je vais ouvrir un autre poste car cela commencer à faire désordre.

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

Discussions similaires

  1. Calculer le nombre de jours/heures/min/sec restant
    Par skaty dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/11/2006, 18h47
  2. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 01h01
  3. Calculer le nombre de jours restants
    Par localhost dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/01/2006, 18h31
  4. [Optimisation][Fonction]calcul du nombre de jours ...
    Par m-mas dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/10/2005, 15h39
  5. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 16h22

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