2


01-2013 から 09-2015 (月-年) のような範囲で指定されたすべての月に対してループ (foreach) を作成する必要があります。
トリッキーな部分は、SQLクエリを実行するためにすべてのループで月と年のデータも必要であるため、単純な+1カウンターを使用できないことです。

Date::Calc と Date::Simple のように見えましたが、解決策はありませんでした。
誰かが私が使用できるコードスニペットを持っているか、この課題に取り組む方法についてアイデアを思いつきますか?

4

4 に答える 4

7

DateTimeモジュールには、オブジェクトに任意の時間を追加できる便利な関数がaddあります。

use strict;
use warnings;
use DateTime;
use feature 'say';

my $start = DateTime->new(year => 2013, month => 1);
my $end   = DateTime->new(year => 2015, month => 9); 

while ($start <= $end) { 
    $start->add(months => 1); 
    say $start->strftime("%m-%Y"); 
}
于 2013-11-01T10:36:34.953 に答える
0
my $start_date = '01-2013';
my $end_date = '09-2015';
my ($sm, $sy) = split '-', $start_date;
my ($em, $ey) = split '-', $end_date;

for my $y ($sy..$ey) {
  for my $m (1..12) {
    next if ($y==$sy && $m<$sm);
    last if ($y==$ey && $m>$em);

    # use $m and $y for further processing sql query
    # print "Month: $m\t Year: $y\n";
    # ...

  }
}
于 2013-11-01T10:30:25.933 に答える
0

Date::Calcは素晴らしいです。もう一度確認してください

use Date::Calc();
my ($month, $year, $end_month, $end_year) = (1, 2013, 9, 2015);

while (($year < $end_year) || ($year == $end_year && $month <= $end_month)) {
    print "year: $year, month: $month\n";
    ($year, $month) = Date::Calc::Add_Delta_YMD($year,$month,1,0,1,0);
}
于 2013-11-01T10:24:03.977 に答える