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),这会导致无限循环.
我无法找出任何替代方法.我觉得我应该能够相对容易地解决这个问题,但我似乎有严重的"开发人员阻止"
提前感谢能够提供帮助的任何人.
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)