2011-08-11 27 views
3

以下を行うために利用できるperlルーチンがありますか?私は良い例を探しています。日付の範囲を取得するためのperlサブルーチン

範囲に基づいて曜日のリストを印刷したいと考えています。

パラメータとして、 ./myperlscript -r 20110630 20110731(例として、-r = rangeの場合)を実行できます。

基本的に、私はこの形式の日付を入力として(2)入力することができれば、当時を印刷することができます。

20110630 
20110701 
20110702 
... 
.. 

答えて

4

これはあなたに役立つはずです。いくつかの入力バリデーション(例えば、@ARGVの要素が正しくフォーマットされていること、最初のものが2番目の日付などを表すことなどを確認したいと思うかもしれません。

use strict; 
use warnings; 
use DateTime; 

unless(@ARGV==2) 
{ 
    print "Usage: myperlscript first_date last_date\n"; 
    exit(1); 
} 

my ($first_date,$last_date)[email protected]; 

my $date=DateTime->new(
{ 
    year=>substr($first_date,0,4), 
    month=>substr($first_date,4,2), 
    day=>substr($first_date,6,2) 
}); 


while($date->ymd('') le $last_date) 
{ 
    print $date->ymd('') . "\n"; 
    $date->add(days=>1); 
} 

ETA:それは何が起こっているのか明確ではない場合、我々は$first_dateに与えられた年、月、日パース、DateTime対象として$date作成します。その後、セパレータなしで年、月、日を印刷し続け、$last_dateになるまで、$dateを1日増やします。

+0

これはクールです。ありがとう。私はそれをテストします。 – jdamae

+0

素晴らしい小さなスクリプト。使い方を明確にしてくれてありがとう。これはとても便利です。 – jdamae

+0

問題ありません。私はそれがうまくいってうれしいです。 :) –

関連する問題