#!/usr/bin/perl use strict; use warnings; use Date::Manip; use feature 'say'; my ($start, $end) = qw(2017-01-01 2017-12-31); # y:m:w:d:h:m:s my @days = ParseRecur('0:0:0:1:0:0:0', $start, $start, $end); my @weeks = ParseRecur('0:0:1::0:0:0', $start, $start, $end); my @months = ParseRecur('0:1:0::0:0:0', $start, $start, $end); my @years = ParseRecur('1:0:0::0:0:0', $start, $start, $end); my @datesEvery15th = ParseRecur('0:0:0:15:0:0:0', $start, $start, $end); say "Number of days: " . scalar @days; say "Number of weeks: " . scalar @weeks; say "Number of months: " . scalar @months; say "Number of years: " . scalar @years; say "Number of payments: " . scalar @datesEvery15th; =print payment dates for my $date (@dates15th) { say UnixDate($date, "%Y-%m-%d"); } =cut __END__ $ perl test.pl Number of days: 365 Number of weeks: 53 Number of months: 12 Number of years: 1 Number of payments: 25