スポンサーリンク

Perlでその日が月の第何週に存在しているかを計算する関数を書いてみました

Perlでその日がその月の第何週に存在しているかを計算する関数(Week_of_Month)を書いてみました。Date::Calc モジュールに依存してますが、標準モジュールなのでそのまま動くはずです。

引数は4つで、第1引数が年、第2引数が月、第3引数が日、第4引数が週の開始日の指定(0:月曜始まり、1:日曜始まり) となっており、第4引数は省略可能です。第4引数を省略した場合は月曜始まりとして動作します。

戻り値はその週の番号(第一週なら 1 )で、日付が存在しない場合は 0 を返します。使い方は以下の通り。

$wom = Week_of_Month(2010, 9, 1);    # 戻り値は 1
$wom = Week_of_Month(2010, 9, 5);    # 戻り値は 1
$wom = Week_of_Month(2010, 9, 6);    # 戻り値は 2
$wom = Week_of_Month(2010, 9, 5, 1); # 戻り値は 2
$wom = Week_of_Month(2010, 2, 29);   # 戻り値は 0

で、ソースはこちらになります。

sub Week_of_Month {
  my $year  = shift;
  my $month = shift;
  my $day   = shift;
  my $mode  = shift;
  
  # Date::Calc モジュールの読み込み
  use Date::Calc qw(Day_of_Week check_date);
  
  # 日付が実在しない場合は0を返す。
  return(0) unless check_date($year, $month, $day); 
  
  # 第何週かを計算
  my $dow = Day_of_Week($year, $month, $day);
  if($mode){
    $dow++;
    $dow = 1 if $dow == 8;
  }
  $day = $day - ($dow + 1);
  return int(($day / 7) + 2);
}

Enjoy!

スポンサーリンク
コメント
Verify your Comment
Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

コメントを投稿
トラックバック

このページのトラックバックURL:
https://www.typepad.com/services/trackback/6a01310f1f31c0970c01348732a5f6970c

このページへのトラックバック一覧 Perlでその日が月の第何週に存在しているかを計算する関数を書いてみました:

おすすめの記事と広告

プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku

    運営サイト
    www.mukairiku.net

ブログ内検索

Licenses

  • Creative Commons License

OTHER

  • このブログのはてなブックマーク数

Blog powered by TypePad

スポンサーリンク