perl sub routine for getting a range of dates
Is there a perl routine that I can utilize that would do the following? I'm looking for a good example.
I want to be able to print out a list of days based on a range.
As a parameter I want to be able to do something like: ./myperlscript -r 20110630 20110731 (as an example where 开发者_JAVA技巧-r = range).
So basically, if I can put (2) dates in this format as inputs and print me those days.
20110630
20110701
20110702
...
..
This should get you started. You probably want to add some input validation (ie making sure that the elements of @ARGV
are formatted correctly and that the first represents a date smaller than the second, etc, etc...).
use strict;
use warnings;
use DateTime;
unless(@ARGV==2)
{
print "Usage: myperlscript first_date last_date\n";
exit(1);
}
my ($first_date,$last_date)=@ARGV;
my $date=DateTime->new(
{
year=>substr($first_date,0,4),
month=>substr($first_date,4,2),
day=>substr($first_date,6,2)
});
while($date->ymd('') le $last_date)
{
print $date->ymd('') . "\n";
$date->add(days=>1);
}
ETA: In case it isn't clear what's going on, we create $date
as a DateTime
object, parsing the year, month, and day that were given in $first_date
. Then, we keep printing out the year, month, and day without separators ($date->ymd('')
) and increase $date
by one day until we're at $last_date
.
精彩评论