Acrux
view release on metacpan or search on metacpan
lib/Acrux/Util.pm view on Meta::CPAN
my $h = shift || 0;
return 0 unless $h;
my ($bts, $sfx) = $h =~ /([0-9.]+)\s*([a-zA-Z]*)/;
return 0 unless $bts;
my $exp = HUMAN_SUFFIXES->{($sfx ? uc($sfx) : "B")} || 0;
return ceil($bts * (2 ** $exp));
}
sub humanize_duration {
my $msecs = shift || 0;
my $secs = int($msecs);
my $years = int($secs / (60*60*24*365));
$secs -= $years * 60*60*24*365;
my $days = int($secs / (60*60*24));
$secs -= $days * 60*60*24;
my $hours = int($secs / (60*60));
$secs -= $hours * 60*60;
my $mins = int($secs / 60);
$secs %= 60;
if ($years) { return sprintf("%d years %d days %s hours", $years, $days, $hours) }
elsif ($days) { return sprintf("%d days %s hours %d minutes", $days, $hours, $mins) }
elsif ($hours) { return sprintf("%d hours %d minutes %d seconds", $hours, $mins, $secs) }
elsif ($mins >= 2) { return sprintf("%d minutes %d seconds", $mins, $secs) }
elsif ($secs > 5) { return sprintf("%d seconds", $secs + $mins * 60) }
elsif ($msecs - $secs) { return sprintf("%.4f seconds", $msecs) }
lib/Acrux/Util.pm view on Meta::CPAN
sub fdatetime {
my $t = shift || time;
return strftime(DATETIME_FORMAT, localtime($t));
}
sub parse_expire {
my $t = trim(shift(@_) // 0);
my %mult = (
's' => 1,
'm' => 60,
'h' => 60*60,
'd' => 60*60*24,
'w' => 60*60*24*7,
'M' => 60*60*24*30,
'y' => 60*60*24*365
);
if (!$t || (lc($t) eq 'now')) {
return 0;
} elsif ($t =~ /^\d+$/) {
return $t; # secs
} elsif ($t=~/^([+-]?(?:\d+|\d*\.\d*))([smhdwMy])/) {
return ($mult{$2} || 1) * $1;
}
return $t;
}
( run in 1.676 second using v1.01-cache-2.11-cpan-7add2cbd662 )