En este foro hay muchos mensajes relativos a cálculo de fechas. Usa el sistema de búsqueda.
También hay una respuesta sobre esto en el perlfaq4:
How can I compare two dates and find the difference?En resumen, con el módulo DateTime lo tienes 'casi' todo hecho. Aquí tienes un ejemplo:
- Código: Seleccionar todo
#!/usr/bin/perl -l
use DateTime;
my $fecha1 = DateTime->new (
day => 15,
month => 8,
year => 2006,
);
my $hoy = DateTime->now->set_time_zone("local")->truncate( to => 'day' );
my $diferencia = $fecha1->delta_days( $hoy );
print $fecha1;
print $hoy;
print $diferencia->in_units('days');
2006-08-15T00:00:00
2006-07-07T00:00:00
39
$fecha se inicializa con el valor del 15 de julio de este año.
$hoy se inicializa con la fecha actual. Por defecto DateTime lo pone al horario GMT, pero me interesa que siga con la hora actual mía (las 01:15 ahora mismo), y luego, quiero que lo trunque a múltiplo de día (es decir, que la hora sea las 00:00, ya que vamos a hacer diferencias entre días enteros).
Estoy obligado a hacer lo del set_time_zone y el truncate, porque sino, me diría que hay 40 días de diferencia: si yo estoy ahora en las 01:15 del 7 de julio, en realidad todavía son las 23:15 del 6 de julio en horario GMT... (el día anterior, luego suma un día más de diferencia).
Como ves, es muy completo y con pocas líneas te da soluciones.