在Perl中两个日期之间循环的最佳方法是什么?

Spr*_*dzy 15 iteration perl loops date

在Perl中两个日期之间循环的最佳/最清晰的方法是什么?CPAN上有很多模块可以解决这个问题,但是在两个日期之间迭代是否有任何经验法则?

Dav*_*aab 30

对于使用日期操作的一切,DateTime可能是最好的模块.要使用您自己的增量获取两个日期之间的所有日期,请使用以下内容:

#!/usr/bin/env perl
use strict;
use warnings;
use DateTime;

my $start = DateTime->new(
    day   => 1,
    month => 1,
    year  => 2000,
);

my $stop = DateTime->new(
    day   => 10,
    month => 1,
    year  => 2000,
);


while ( $start->add(days => 1) < $stop ) {
    printf "Date: %s\n", $start->ymd('-');
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

Date: 2000-01-02
Date: 2000-01-03
Date: 2000-01-04
Date: 2000-01-05
Date: 2000-01-06
Date: 2000-01-07
Date: 2000-01-08
Date: 2000-01-09
Run Code Online (Sandbox Code Playgroud)

  • 这有点令人困惑,因为它是在'$ start`之后的第二天开始的 (3认同)

Eug*_*ash 7

这些天,大多数人会建议使用DateTime:

use DateTime;   

my $start = DateTime->new(...); # create two DateTime objects
my $end   = DateTime->new(...);

while ($start <= $end) {
    print $start->ymd, "\n";
    $start->add(days => 1);
}
Run Code Online (Sandbox Code Playgroud)