Perl: Calculate time difference in human readable way
Perl function to return a human readable string for a time duration in seconds.
my $str = human_time_diff(320); # "5 minutes"
my $str = human_time_diff(3700); # "1 hour"
sub human_time_diff {
my $seconds = int(shift());
my $num = 0;
my $unit = "";
my $ret = "";
if ($seconds < 120) {
$ret = "just now";
} elsif ($seconds < 3600) {
$num = int($seconds / 60);
$unit = "minute";
} elsif ($seconds < 86400) {
$num = int($seconds / 3600);
$unit = "hour";
} elsif ($seconds < 86400 * 30) {
$num = int($seconds / 86400);
$unit = "day";
} elsif ($seconds < (86400 * 365)) {
$num = int($seconds / (86400 * 30));
$unit = "month";
} else {
$num = int($seconds / (86400 * 365));
$unit = "year";
}
if ($num > 1) { $unit .= "s"; }
if ($unit) { $ret = "$num $unit"; }
return $ret;
}
See also: PHP version