+sub LastDayOfWeek {
+ my ($year, $month, $day, $matchday) = @_;
+ my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
+ );
+
+ my $dt = DateTime->new( year => $year, month => $month, day => $day );
+
+ $dt = $set->next($dt) while $dt->day_of_week != $matchday;
+ $dt;
+
+}
+