A ver... yo no domino nada... lo que hago es siempre consultar la documentación. En este caso, de
Date::Manip. Y luego hacer pruebas, muchas pruebas.
Vamos a poner un ejemplo de acumulación de valores delta (lapsos de tiempo).
Este programa:
Using perl Syntax Highlighting
1 #!/usr/bin/perl -l
2
3
use Date
::Manip;
4
5
@fechas = qw(
6 2006121814
:16
:00
7 2006121815
:36
:10
8 2006121816
:09
:04
9 2006121818
:16
:34
10 2006121821
:26
:40
11 2006121823
:01
:00
12
);
13
14
for ( $i=1; $i<@fechas; $i++ ) {
15
$diferencia = DateCalc
( $fechas[$i-1
], $fechas[$i] );
16
$horas = DateCalc
( $horas, $diferencia );
17
print Delta_Format
($diferencia,0,"%hv horas %mv minutos %sv segundos");
18
}
19
print "Total:";
20
print Delta_Format
($horas,0,"%hv horas %mv minutos %sv segundos");
21
22
print Delta_Format
(DateCalc
($fechas[0
], $fechas[-1]),0,"%hv horas %mv minutos %sv segundos");Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Esto es lo que hace:
* En la línea 5 definimos las
@fechas que vamos a usar. Queremos calcular la diferencia entre cada par de fechas.
* El bucle de la línea 14 a 18 recorre los valores de 1 al último índice posible de
@fechas. Es decir, no empezamos en 0.
* En la línea 15 hallamos la
$diferencia (delta) de tiempo entre el tiempo $i-ésimo y el anterior.
* En
$horas vamos a ir acumulando todas las diferencias. En la línea 16 volvemos a usar la misma función DateCalc. En este ocasión, DateCalc toma a
$horas como una delta (de valor 0 al principio) y
$diferencia como otra delta, por lo que entonces la operación que realiza es la suma y da como resultado otra delta, que vamos dejando acumulado en
$horas.
* La línea 17 nos sirve para mostrarnos la delta que hemos calculado un par de líneas antes.
* Finalmente, en la línea 20 pintamos la suma de todas las deltas.
* Como comprobación, vamos a pintar, en la línea 22, la diferencia entre la primera fecha y la última, para ver que, efectivamente, coincide con el resultado anterior.
La salida es:
- Código: Seleccionar todo
1 horas 20 minutos 10 segundos
0 horas 32 minutos 54 segundos
2 horas 7 minutos 30 segundos
3 horas 10 minutos 6 segundos
1 horas 34 minutos 20 segundos
Total:
8 horas 45 minutos 0 segundos
8 horas 45 minutos 0 segundos
Comentar finalmente que es siempre más recomendable usar el paquete
DateTime para todo lo relacionado con Fechas y Tiempos.