Как печатать даты между 2 границами дат - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть 2 даты в формате:

27.12.2007

12.03.2010

Как распечатать все дни (в цикле) между этими двумя датами?

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Я знаю, что вы уже приняли ответ, но он использует довольно неуклюжий старый модуль Date :: Calc.В наши дни большинство людей рекомендуют использовать DateTime вместо этого.

#!/usr/bin/perl

use strict;
use warnings;

use DateTime;

my %start;
@start{qw[day month year]} = split /\./, '27.12.2007';
my %end;
@end{qw[day month year]} = split /\./, '12.03.2010';

my $start = DateTime->new(%start);
my $end   = DateTime->new(%end);

my $curr = $start;

while ($curr <= $end) {
  print $curr->ymd, "\n";
  $curr->add(days => 1);
}
3 голосов
/ 07 декабря 2010

Использование Date::Calc.

use Date::Calc qw(Delta_Days Add_Delta_Days);

my @begin = reverse split /\./, '27.12.2007';
my @end   = reverse split /\./, '12.03.2010';

my $delta = Delta_Days(@begin, @end); 

for my $i (0..$delta) {
    printf "%d-%02d-%02d\n", Add_Delta_Days(@begin, $i);
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...