# Always use gmtime and timegm when # dealing with dates without times. use Time::Local qw( timegm ); # Replace with your input. my $then_date_str = 'YYYYMMDD'; my $then_date = do { my ($y, $m, $d) = $then_date_str =~ /^(.{4})(.{2})(.{2})\z/; $m--; timegm(0, 0, 0, $d, $m, $y) }; my $now_date = do { my ($y, $m, $d) = (localtime())[5,4,3]; timegm(0, 0, 0, $d, $m, $y) }; my $diff = $now_date - $then_date; my $diff_days = int($diff / (24*60*60)); if ($diff_days < -1) { printf("%d days ago\n", -$diff_days); } elsif ($diff_days == -1) { print("yesterday\n"); } elsif ($diff_days == 1) { print("tomorrow\n"); } elsif ($diff_days > 1) { printf("%d days from now\n", $diff_days); } else { print("today\n"); }