http://qs1969.pair.com?node_id=666474


in reply to Yesterday Date

Here's one without any module required. (Mainly for fun.) Take the current time. Find the day of the week. Then subtract 12 hours at a time while you're still on that day or you're on a weekend (day = 0 or 6 -- so abs(3-day) == 3). I think you avoid any Daylight Saving problems by going 12 hours at a time. (Going 24 hours at a time could skip the 23-hour day.) Someone correct me if that's wrong.

my $t = time; my $dow = (localtime $t)[6]; my $new_dow; do { $t -= 43200; # half a day, to counter Daylight Saving effects $new_dow = (localtime $t)[6]; } while $dow == $new_dow or 3 == abs(3-$new_dow); my @ymd = (localtime $t)[5,4,3]; $ymd[0]+=1900; $ymd[1]++; my $date = sprintf "%04d-%02d-%02d", @ymd;