Как я могу создать список дат в Perl? - PullRequest
1 голос
/ 20 мая 2011

Я хочу написать скрипт, который генерирует даты между настоящим и последним годом в perl.

Пример

                <option value="01/02/2010">Feb 07</option>
                <option value="01/03/2010">Mar 07</option>
                <option value="01/04/2010">Apr 07</option>
                <option value="01/05/2010">May 07</option>
                <option value="01/06/2010">Jun 07</option>
                <option value="01/07/2010">Jul 07</option>
                <option value="01/08/2010">Aug 07</option>
                <option value="01/09/2010">Sep 07</option>
                <option value="01/10/2010">Oct 07</option>
                <option value="01/11/2010">Nov 07</option>
                <option value="01/12/2010">Dec 07</option

Я понятия не имею, как я могу это сделать.Сейчас я делаю это вручную

Ответы [ 5 ]

6 голосов
/ 20 мая 2011

Отрегулируйте форматирование и вычитаемое количество для вкуса.

#!/usr/bin/perl

use strict;
use warnings;
use DateTime;

my $now = DateTime->now;
my $start_of_last_year = DateTime->new( year => $now->year - 1 );
while ( $now > $start_of_last_year ) {
        print $now->ymd('/'), "\n";
        $now->subtract( days => 1 );
}
2 голосов
/ 20 мая 2011

Попробуйте:

#!/usr/bin/env perl

use strict;
use warnings;

use POSIX;

my $Now = time;
my @Now = localtime( $Now );

for my $count ( 1 .. 12 ){
  # month/day/year
  print strftime( "%m/%d/%Y\n", @Now );
  $Now[4] --;
  if( $Now[4] < 0 ){
    $Now[4] = 11;
    $Now[5] --;
  }
}
0 голосов
/ 20 мая 2011

Использование Дата :: Простой

#!/usr/bin/perl
use strict;
use warnings;
use 5.012;
use Date::Simple qw/ today ymd /;

my $now = today;

for (my $date = ymd($now->year, 1, 1); $date <= $now; $date++) {
    say $date;  
}

Если вы хотите, чтобы в прошлом году (а не в начале этого года) вы могли вызвать в цикле 'ymd' как:

ymd($now->year()-1, 1, 1);
0 голосов
/ 20 мая 2011

Другой модуль, на который стоит обратить внимание, это Date :: Calc.Мне нужен модуль, чтобы заменить некоторые неуклюжие вычисления даты для одного из моих сценариев, и похоже, что он делает все, что мне когда-либо понадобится.http://metacpan.org/pod/Date::Calc

0 голосов
/ 20 мая 2011
use 5.010;
use strict;
use warnings;

use POSIX qw<strftime>;

my @loc = localtime();

for ( 1..12 ) { 
    say strftime( qq{<option value="01/%m/%Y">%b 07</option>}, @loc );
    $loc[4]--;
}

Выход:

<option value="01/05/2011">May 07</option>
<option value="01/04/2011">Apr 07</option>
<option value="01/03/2011">Mar 07</option>
<option value="01/02/2011">Feb 07</option>
<option value="01/01/2011">Jan 07</option>
<option value="01/12/2010">Dec 07</option>
<option value="01/11/2010">Nov 07</option>
<option value="01/10/2010">Oct 07</option>
<option value="01/09/2010">Sep 07</option>
<option value="01/08/2010">Aug 07</option>
<option value="01/07/2010">Jul 07</option>
<option value="01/06/2010">Jun 07</option>

Только для улыбок, альтернативная сжатая версия:

use 5.010;
use strict;
use warnings;

use POSIX qw<strftime>;

say join( "\n"
        , map { 
             my $t = strftime( qq{<option value="01/%m/%Y">%b 07</option>}, @$_ ); 
             $_->[4]--; 
             $t; 
          }
          (( [ localtime ] ) x 12 )
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...