« 明日(昨日)の日付を計算したい (Perl, time) | メイン | 指定日の曜日を求めたい (Perl, Date::Simple) »

カテゴリー:カレンダー(日付) 

日付の四則演算がしたい (Perl, Date::Simple)

このエントリーを含むはてなブックマーク  livedoorクリップ  日付の四則演算がしたい (Perl, Date::Simple)をdel.icio.usに追加  日付の四則演算がしたい (Perl, Date::Simple)をYahoo!ブックマークに追加  日付の四則演算がしたい (Perl, Date::Simple)をニフティクリップに追加

ある日から15日先(または前)の日付を計算するなどしたいが、どうすれば良いだろうか?
time値が分かっていれば簡単に求めることが出来るが、それが全く分からない。

今回はDate::Simpleを使った解法を示すことにする。

以下のプログラムの実行には、Date::Simpleモジュールのインストールが必要となっている。

;#
;#X日後(前)の日付を求める
;#

use Date::Simple;

#-- 計算元の日付 --#
my ($yyyy, $mm, $dd) = (2006, 12, 31);

#-- 加算(減算)する値 --#
my $plus = 5;

#-- 計算 --#
$result = calDate($yyyy, $mm, $dd, 5);
print $result;


#----------------------------------#
#日付の演算を行う
#----------------------------------#
sub calDate{
  my $yyyy = shift;
  my $mm = shift;
  my $dd = shift;
  my $plus = shift;

  #演算
  my $date = Date::Simple::ymd($yyyy, $mm, $dd);
  my $result = $date + $plus;

  #戻す
  return(
    wantarray? ($date->year, $date->month, $date->day):$result
  );
}

○実行結果

2007-01-05


上記のcalDate関数では、関数の呼び出し元がリスト(配列など)を求めている場合は、年・月・日をそれぞれ返し、スカラーの場合は実行結果のような文字列を返す。



■もっと簡単に演算
例えば次のようなコードを書くと、日付と日付の間に何日あるかを調べることができる。

use Date::Simple;

print date('2001-08-27') - date('1977-10-05');


※動作しない場合は「Date::Simple::date('2001-08-27')」などとパッケージ名も指定する。




■初期化について
例ではymdを使用しているが、次のような初期化(オブジェクトの生成、取得)を行うことも可能だ。

use Date::Simple;
my $date = Date::Simple->new('1972-01-17');



■曜日の取得
曜日の取得はday_of_weekメソッドを呼び出すことで可能。

use Date::Simple;

my $date = Date::Simple->new('1979-10-05');
my $youbi = $date->day_of_week;

print (('日','月','火','水','木','金','土')[$youbi]);






その他詳しいことはドキュメントを参照されたい。

Date::Simple - 簡単な日付オブジェクト
http://perldoc.jp/docs/modules/Date-Simple-2.03/Simple.pod




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/335

この一覧は、次のエントリーを参照しています: 日付の四則演算がしたい (Perl, Date::Simple):

» 明日(昨日)の日付を計算したい (Perl, Date::Simple) from CGI(Perl)例文集
明日、また昨日の日付を計算したい。 Date::Simpleモジュールを使用する... [詳しくはこちら]

コメント

> $result = calDate($yyyy, $mm, $dd, 5);

この最後の「5」はなにを意味しているのでしょうか?

$result = calDate($yyyy, $mm, $dd, $plus);

ではないのですね?

>この最後の「5」はなにを意味しているのでしょうか?
>$result = calDate($yyyy, $mm, $dd, $plus);

意味的には$plusと等価ですね。上でわざわざ代入しているのを忘れていたようです(笑)

つっこみありがとうございます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)






クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.