$d1 = '05-02-2003 10:30:44'; $d2 = '06-02-2003 11:31:47'; my ( $days, $hours, $mins, $secs ) = delta_date( $d1, $d2 );; die "Auction expired" unless defined $secs; print format_time_remaining( $days, $hours, $mins, $secs), 'remaining'; sub delta_date { use Time::Local; my ($start, $end) = @_; my($d,$m,$y,$h,$min,$s) = split /[- :]/, $start; my $start_sec = timegm($s, $min, $h, $d, $m-1, $y); ($d,$m,$y,$h,$min,$s) = split /[- :]/, $end; my $end_sec = timegm($s, $min, $h, $d, $m-1, $y); my $diff = $end_sec - $start_sec; return undef if $diff < 0; my $days = int( $diff / (24*3600) ); $diff -= $days * 24*3600; my $hours = int( $diff / (3600) ); $diff -= $hours * 24*60; my $mins = int( $diff/ 60 ); $diff -= $mins * 60; return $days, $hours, $mins, $diff; } sub format_time_remaining { ($days, $hours, $mins, $secs) = @_; my $str = ''; $str .= $days . ' day' . (($days ==1 ) ? ', ' : 's, '); $str .= $hours . ' hour' . (($hours == 1) ? ', ' : 's, '); $str .= $mins . ' minute' . (($mins == 1) ? ', ' : 's, '); $str .= $secs . ' second' . (($secs == 1) ? ' ' : 's '); return $str; }