确定日期范围内日期的好方法是什么?

Noa*_*ahD 4 perl datetime data-structures

什么是一个好的Perl模块(或好的方法),它返回开始日期和结束日期之间的所有有效日历日期?

例如,如果我将1/29/2009作为开始日期而2/3/2009作为结束日期,那么我希望它返回1/30/2009,1/31/2009,2/1的数组/ 2009年和2009年2月2日.必须有一个好的Perl模块已经完成了这个并且占了闰年,几个月,但我找不到它.

谢谢你的建议!

Ben*_*n S 9

DateTime,我已经多次使用它,它几乎可以做任何你能想到的日期.它处理闰年,闰秒,无效日期/时间,它可以以任何格式输出日期,它可以比较,添加,减去等...

唯一的问题是它可能有点矫枉过正.


run*_*rig 6

这是使用DateTime的示例:

use strict;
use warnings;

use DateTime;

my $d1 = DateTime->new( month => 1, day => 29, year => 2009);
my $d2 = DateTime->new( month => 2, day => 3,  year => 2009);

while ($d1 <= $d2) {
  print $d1->strftime("%m/%d/%Y"),"\n";
  $d1->add(days => 1);
}
Run Code Online (Sandbox Code Playgroud)


小智 2

Date::Manip似乎是 Perl 中规范的日期模块。它有一个奇怪的 API,但它可以工作。下面是使用 ParseRecur 函数执行您想要的操作的示例:

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

use Date::Manip;
use Data::Dumper;

my ($start, $end) = qw(2009-01-29 2009-02-03);

# Exclude start date
$start = DateCalc($start, "+1 day");

# y:m:w:d:h:m:s
my @dates = ParseRecur('0:0:0:1:0:0:0', $start, $start, $end);

for my $date (@dates) {
    print UnixDate($date, "%Y-%m-%d\n");
}
Run Code Online (Sandbox Code Playgroud)