-
- # get the correct month and year if it is a short date
- if (my ($d) = $iso =~ /^(\d\d)T\d\d\d\d/) {
+
+ # get the correct day, if required
+ if (my ($h) = $iso =~ /^([012]\d)[0-5]\d(?:[0-5]\d)?$/) {
+ my ($d, $m, $y) = ($day, $month, $year);
+ if ($h != $hour) {
+ if ($hour < 12 && $h - $hour >= 12) {
+ # yesterday
+ ($d, $m, $y) = _yesterday($d, $m, $y);
+ } elsif ($hour >= 12 && $hour - $h > 12) {
+ # tomorrow
+ ($d, $m, $y) = _tomorrow($d, $m, $y);
+ }
+ }
+ $iso = sprintf("%04d%02d%02dT", $y, $m, $d) . $iso;
+ } elsif (my ($d) = $iso =~ /^(\d\d)T\d\d\d\d/) {
+
+ # get the correct month and year if it is a short date