Найти номер недели в диапазоне дат в Perl - PullRequest
0 голосов
/ 28 января 2012

У меня есть диапазон дат - скажем, 2012-01-30 .. 2012-04-06 - которые обозначают набор недель, которые попадают в эти даты. Эти недели пронумерованы с 1 по 10. Учитывая сегодняшнюю дату (например, 2012-02-29), я хочу иметь возможность получить номер недели в пределах диапазона (в данном случае 5). Как мне добиться этого в Perl?

Ответы [ 3 ]

3 голосов
/ 28 января 2012

Пакет Time::Piece имеет strptime метод для анализа строки в объекте времени и week метод для указания номера недели объекта времени.

use Time::Piece;
my @dates = ('2012-01-30', ..., ...., '2012-04-06');

foreach my $strdate (@dates) {
    my $date = Time::Piece->strptime($strdate, "%Y-%m-%d");
    print "Number of week for '$strdate' is " . $date->week . "\n";
}

Все, что вам нужно сделать, это просто посчитать количество уникальных недель в вашем диапазоне.

1 голос
/ 28 января 2012
use DateTime qw();
my (undef, $initial_weeknumber) 
    = DateTime->new(year => 2012, month => 1, day => 30)->week;
my (undef, $target_weeknumber)  
    = DateTime->new(year => 2012, month => 2, day => 29)->week;
printf 'We are in week %d of the Jashank epoch.', 
    1 + $target_weeknumber - $initial_weeknumber;
1 голос
/ 28 января 2012

Значение даты окончания не имеет значения, если вы не хотите включить некоторую проверку значения.Необходимое значение: week (дата начала) - week (эта дата) + 1 .Я рекомендую модуль Date::Calc за его аккуратность и эффективность.Код выглядит следующим образом

use strict;
use warnings;

use Date::Calc 'Week_Number';

sub week {
  Week_Number(split /-/, $_[0]);
}

print week('2012-02-29') - week('2012-01-30') + 1, "\n";

ВЫХОД

5
...