use Date::Calc qw( Today Day_of_Week Add_Delta_Days Day_of_Week_to_Text Date_to_Text ); #$searching_dow = 6; # 6 = Saturday $searching_dow = 3; # wed @today = Today(); $current_dow = Day_of_Week(@today); if ($searching_dow == $current_dow) { @prev = Add_Delta_Days(@today,-7); @next = Add_Delta_Days(@today,+7); } else { if ($searching_dow > $current_dow) { @next = Add_Delta_Days(@today, $searching_dow - $current_dow); @prev = Add_Delta_Days(@next,-7); } else { @prev = Add_Delta_Days(@today, $searching_dow - $current_dow); @next = Add_Delta_Days(@prev,+7); } } $dow = Day_of_Week_to_Text($searching_dow); print "Today is: ", ' ' x length($dow), Date_to_Text(@today), "\n"; print "Last $dow was: ", Date_to_Text(@prev), "\n"; print "Next $dow will be: ", Date_to_Text(@next), "\n"; __END__ Today is: Wed 25-May-2011 Last Wednesday was: Wed 18-May-2011 Next Wednesday will be: Wed 1-Jun-2011