- ベストアンサー
日付範囲をの連番と月末を取得
今日から、指定した月の月末までの日付範囲を 取得する方法ありますでしょうか? 月末を取得する方法は↓を使えばできそうなのですが。 http://www.futomi.com/subroutine/getlastday.html 日付範囲を取得する方法が思いつきません。 今日~9月末までの日付を配列で取得したい。 ↓ [返却データ] 8/6 /8/7・・・9/29/ 9/30
- みんなの回答 (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 ように、必要とするモジュールや西暦の制限はありませんが、月の値の範囲や過去かどうかのチェックは行っていないので、必要なら加えてください。 また、インデントを見やすくするため全角スペースを使っているので、コピペする場合はタブなどに変換してください。
お礼
<script>モジュールソース。使わせていただきました。</script> ありがとうございます。 無事動作しました。