アプリ版:「スタンプのみでお礼する」機能のリリースについて

今日から、指定した月の月末までの日付範囲を
取得する方法ありますでしょうか?

月末を取得する方法は↓を使えばできそうなのですが。
http://www.futomi.com/subroutine/getlastday.html
日付範囲を取得する方法が思いつきません。

今日~9月末までの日付を配列で取得したい。

[返却データ] 8/6 /8/7・・・9/29/ 9/30

A 回答 (1件)

あんまり考えずに作ったんで分かりにくい部分があるかもしれませんが、一応。



# 今日から指定月の末日までの日付(m/d)のリストを返す
sub getDateList_Custom { # year, month -> @date
  my @date;
  my ($ey, $em) = @_;
  my ($sd, $sm, $sy) = (localtime)[3..5];

  for (my $tm = ($sy+1900)*12+$sm; $tm <= $ey*12+$em-1; $tm++) {
    my $cy = int($tm / 12);
    my $cm = $tm % 12 + 1;
    push @date, map "$cm/$_", $sd .. getLastDay($cy, $cm);
    $sd = 1;
  }
  return @date;
}

# 月末日を返す
sub getLastDay { # year, month -> day
  return (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$_[1] - 1]
    + ($_[1] == 2 && isLeap($_[0]));
}

# うるう年か調べる
sub isLeap { # year -> bool
  return $_[0] % 4 == 0 && ($_[0] % 400 == 0 || $_[0] % 100 != 0);
}

各関数の使い方は、
  sub 関数名 { # 引数リスト -> 戻り値
のように書いておきました。
year には4桁の西暦を、month には 1 ~ 12 を指定してください。
質問のURLの GetLastDay ように、必要とするモジュールや西暦の制限はありませんが、月の値の範囲や過去かどうかのチェックは行っていないので、必要なら加えてください。
また、インデントを見やすくするため全角スペースを使っているので、コピペする場合はタブなどに変換してください。
    • good
    • 0
この回答へのお礼

<script>モジュールソース。使わせていただきました。</script>
ありがとうございます。
無事動作しました。

お礼日時:2003/08/13 21:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!