Bonjour,

Je vous propose un code pour convertir une durée qui est en secondes en un texte donnant le nombre d'années, de mois, jours, heures, minutes et secondes.

Utilisation : perl programme.pl <duree en secondes>.

Bien évidement, le code peut être amélioré, donc n'hésitez pas à faire des remarques, propositions...

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/perl
# But 	: 	Calculer le nombre d'années, mois, jours, heures, minutes et secondes
#			à partir d'une durée en secondes.
# USAGE :   perl programme <DUREE en secondes>
use strict;
use warnings;
 
print time_format( $ARGV[0] ), "\n";
 
sub time_format {
	my $totalsecondes = shift;
 
	return '0 second' if (not defined $totalsecondes or $totalsecondes == 0);
 
	my $message = '';
	my ( $nbr_annees, $nbr_mois, $nbr_jours, $nbr_heures, $nbr_minutes, $nbr_secondes ) = ();
 
	# Annees
	my $duree_an = 60 * 60 * 24 * 30.41 * 12;
	$nbr_annees = int( $totalsecondes / $duree_an );
	if ( $nbr_annees > 0 ) {
		$totalsecondes = $totalsecondes % $duree_an;
		$message .= ( $nbr_annees == 1 ) ? "$nbr_annees year " : "$nbr_annees years ";
	}
 
	# Mois
	my $duree_mois = 60 * 60 * 24 * 30.41;
	$nbr_mois = int( $totalsecondes / $duree_mois );
	if ( $nbr_mois > 0 ) {
		$totalsecondes = $totalsecondes % $duree_mois;
		$message .= ( $nbr_mois == 1 ) ? "$nbr_annees month " : "$nbr_annees months ";
	}
 
	# Jours
	my $duree_jours = 60 * 60 * 24;
	$nbr_jours = int( $totalsecondes / $duree_jours );
	if ( $nbr_jours > 0 ) {
		$totalsecondes = $totalsecondes % $duree_jours;
		$message .= ( $nbr_jours == 1 ) ? "$nbr_jours day " : "$nbr_jours days ";
	}
 
	# Heures
	my $duree_heures = 60 * 60;
	$nbr_heures = int( $totalsecondes / $duree_heures );
	if ( $nbr_heures > 0 ) {
		$totalsecondes = $totalsecondes % $duree_heures;
		$message .= ( $nbr_heures == 1 ) ? "$nbr_heures hour " : "$nbr_heures hours ";
	}
 
	# Minutes
	my $duree_minutes = 60;
	$nbr_minutes = int( $totalsecondes / $duree_minutes );
	if ( $nbr_minutes > 0 ) {
		$totalsecondes = $totalsecondes % $duree_minutes;
		$message .= ( $nbr_minutes == 1 ) ? "$nbr_minutes minute " : "$nbr_minutes minutes ";
	}
 
	# Secondes
	if ( $totalsecondes > 0 ) {
		$message .= ( $totalsecondes == 1 ) ? "$totalsecondes seconde " : "$totalsecondes secondes ";
	}
 
	return $message;
}