0

2012-01-30 .. 2012-04-06 のような日付の範囲があります。これは、これらの日付に含まれる一連の週を表します。これらの週には 1 から 10 までの番号が付けられています。今日の日付 (たとえば 2012-02-29) から、範囲内 (この場合は 5) の週番号を取得できるようにしたいと考えています。Perlでこれを達成するにはどうすればよいですか?

4

3 に答える 3

3

パッケージ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";
}

必要なのは、範囲内の一意の週数を数えることだけです。

于 2012-01-28T12:31:18.410 に答える
1

値のチェックを組み込みたい場合を除いて、終了日の値は何の違いもありません。必要な値は、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
于 2012-01-28T13:48:56.137 に答える
1
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;
于 2012-01-28T19:15:15.570 に答える