Perl - 每月增量循环

Gni*_*ots 1 perl loops increment

我过去几个月一直在使用以下代码,它从预定义的日期开始经过几个月的时间,直到它到达今天的日期.

use Date::Pcalc qw(:all);

$startDay = 1;
$startMonth = '4';
$startYear = '2009';

$dateToday = `date +%Y-%m-%d`;
($yt,$mt,$dt) = split(/\-/,$dateToday);

while ($endMonth <= $mt || $startYear < $yt ) {

if ($startMonth eq '12') {
    $endMonth = 1;
    $endYear = $startYear + 1;
  } else {
    $endMonth = $startMonth + 1;
    $endYear = $startYear;
  }

  if ($startMonth eq '12') {
    $endYear = $startYear + 1;
  }

  ($meYear,$meMonth,$meDay) = Add_Delta_Days($endYear,$endMonth,$startDay,-1);
  $endOfMonth = "$meYear-$meMonth-$meDay";
  $monthText = Month_to_Text($startMonth);

  $startDate = "$startYear-$startMonth-1";
  $endDate = "$endYear-$endMonth-1";

print "$startDate - $endDate\n";

if ($startMonth eq '12') {
    $startMonth = 1;
    $startYear++;
  } else {
    $startMonth++
  }

}
Run Code Online (Sandbox Code Playgroud)

这在过去的几个月里一直很好用,但我已经意识到现在在12月,因为$ endmonth永远不会更大$ mt(12),这会导致无限循环.

我无法找出任何替代方法.我觉得我应该能够相对容易地解决这个问题,但我似乎有严重的"开发人员阻止"

提前感谢能够提供帮助的任何人.

ike*_*ami 6

my $date = DateTime->new(
   time_zone => 'local',
   year      => $startYear,
   month     => $startMonth,
   day       => 1,
);

my $today = DateTime->today(time_zone => 'local');

while ($date <= $today) {
   say $date->ymd('-');
   $date->add( months => 1 );
}
Run Code Online (Sandbox Code Playgroud)