use 5.014; use DateTime qw(); my %day2t = ( Friday => 'T', Saturday => 'T-1', Sunday => 'T-2', Monday => 'T-3', Tuesday => 'T-4', Wednesday => 'T-5', Thursday => 'T-6', ); { my $today = DateTime->now->truncate(to => 'day'); # 2013-11-25T00:00:00 $today->day_name; # Monday $day2t{$today->day_name}; # T-3 my $into_the_past = ($day2t{$today->day_name} =~ s/T-?//r) || 0; # 3 $today->clone->subtract(days => $into_the_past)->strftime('%F'); # 2013-11-22 } { my $beginning_of_november = DateTime->new(year => 2013, month => 11, day => 1); # 2013-11-01T00:00:00 $beginning_of_november->day_name; # Friday $day2t{$beginning_of_november->day_name}; # T my $into_the_past = ($day2t{$beginning_of_november->day_name} =~ s/T-?//r) || 0; # 0 $beginning_of_november->clone->subtract(days => $into_the_past)->strftime('%F'); # 2013-11-01 }