[Perl] Compte à rebours

Compte à rebours [Perl] - Perl - Programmation

Marsh Posté le 13-06-2003 à 12:53:37    

Bonjour,
 
j'ai crée un compteur pour mon site internet qui est un compte à rebours du style de J-xx avant Noêl.
 
Mais le programme est compliqué, et je pense qu'il est faux.
Pourriez-vous me dire ce que vous en pensez ? J'ai eu du mal avec les années bissextiles.  
 
sub compteur {
 
$date_echeance = 171;
$annee_echeance = 2003;
$decalage_horaire = 6;
 
# Demande de la date
$decalage = time + ($decalage_horaire * 3600);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($decalage);
$year += 1900;
 
# Calcul du compte à Rebours
$y = (($date_echeance - $yday) + (($annee_echeance - $year)*365));
 
# On corrige si c'est une année bissextile
foreach ($year..$annee_echeance) {
 
 # L'année est bissextile
 if (&leap($_) == 2) {
 
  # L'année en cours est l'année d'échéance
  if ("$year" eq "$annee_echeance" ) {
   
   # On ajoute 1 si le 29 Février est inclus dans le décompte
   if (($date_echeance <= 59) and ($yday <= 59)) {$y++}
 
  # Sinon
  } else {
 
   # Si un 29 Février arrive dans l'année en cours ...
   if (($_ eq "$year" ) and ($yday <= 59)) {$y++}
 
   # Si un 29 Février existe dans l'année d'échéance
   elsif (($_ eq "$annee_echeance" ) and ($date_echeance >= 59)) {$y++}
   
   # Si une année bissextile existe pour une année située au centre de la boucle
   else {$y++}
     
    }
     
}
     
}
 
}
 
sub leap {
 
my $year = shift;
 
# C'est quoi une année Bissextile ?
 
 unless ($year % 4) {
 
 unless ($year % 100) {
 
  unless ($year % 400) {
   
  # Année divisible par 4, 100 et 400 : bissextile
  return "2";
  }
   
  # Année divisible par 4, 100 mais non 400 : non bissextile
  else {
  return "1";
  }
 }
 
 # Année divisible par 4 mais non 100 : bissextile
 else {
 return "2";
 }
}
 
# Année non divisible par 4 : non bissextile
else {
return "1";
}
 
aprés, j'affiche : j-$y avant...
 
(note : il y a peet-être un crochet de trop ou de moins, j'ai supprimé des trucs pour le post..)
 
merci !!  :bounce:


Message édité par Ethan_carter le 13-06-2003 à 12:57:49
Reply

Marsh Posté le 13-06-2003 à 12:53:37   

Reply

Marsh Posté le 13-06-2003 à 13:02:43    

Au fait, je voudrais aussi inclure les minutes et les heures, du style :
il reste 18 jours, 2 heures et 34 minutes.
 
mais je dois admettre que là je n'ai su faire que ça :
 
$y_1 = 23-$hour; $y_2 = 59-$min;
 
$y jours, ${y_1}h et $y_2 minutes
 
ce qui bien sûr ne fonctionne que si l'échéance arrive à minuit !  :kaola:  
merci

Reply

Marsh Posté le 13-06-2003 à 15:00:46    

bin perso je me servirais de Local::Time qui est inclus dans toutes les distribs je crois, du coup ça donnerais un script dans le genre:
use Time::Local;

Code :
  1. use Time::Local;
  2. my $nb_secs = timelocal( 0, 0, 0, 25, 11, 2003) - time();


comme ça tu as le nombre de secondes ecoulés entre les deux dates et après t'as plus qu'à secouer un peu pour avoir les heures/jours/mois correspondants...


Message édité par anapajari le 13-06-2003 à 15:01:03
Reply

Marsh Posté le 13-06-2003 à 17:09:35    

OK, je vais essayer tout de suite !
 
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed