3

私は Perl DateTime Moduleを使用していましたが、指定された月の、 、 FirstSecondThirdFourthをどのように計算するのか疑問に思ってい ました。Last Sunday'sMonday'sSaturday's

私のアプローチ

i= 1...DateTime->last_day_of_month( ... ) からループを実行します。

日付 i を date($dt) に割り当て、$dt->day_of_week() を使用して曜日を取得します。

カウンターを使用して、最初、2 番目、3 番目、4 番目、最後を追跡します。

曜日が目的の日と一致し、カウンターが目的の間隔と一致する場合、ループを中断します。

上記よりも優れた(または短い)アプローチを提案できますか?どんな助けでも大歓迎です。

4

2 に答える 2

1

別のオプションは、モジュールDate::Manipを利用することです:

use strict;
use warnings;
use Date::Manip::Base;

my $dmb = new Date::Manip::Base;

# First Tuesday in October 2013
my $year  = 2013;
my $Nth   = 1;      # 1 = first
my $dow   = 2;      # 2 = Tuesday (day of week)
my $month = 10;     # October

# $ymd is an array reference
my $ymd = $dmb->nth_day_of_week( $year, $Nth, $dow, $month );

print join '-', @$ymd; # prints 2013-10-1

日付文字列を解析するには、次のようにします。

use strict;
use warnings;
use Date::Manip::Date;

my $date = new Date::Manip::Date;

$date->parse('First Tuesday in October 2013');

print $date->printf('%Y-%m-%d'); # prints 2013-10-01

お役に立てれば!

于 2013-09-20T05:17:47.467 に答える