考えるのが面倒くさかったため、ネットで答えを探したが
うまく見つけることができなかったため、固い頭を使って
考えてみた。
その結果を晒します。
■仕様
- 月曜日基点で考える。
- 月曜日が所属する月にその週は属する。
週 | 月 | 火 | 水 | 木 | 金 | 土 | 日 |
---|---|---|---|---|---|---|---|
2月-3週 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
2月-4週 | 28 | 1 | 2 | 3 | 4 | 5 | 6 |
3月-1週 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
実際のコードは以下。
def mweek(date) day = date - (date.cwday - 1) base_month = day.month week = 0 (1..5).each do |index| day -= 7 if base_month != day.month week = index break end end { :month => base_month, :week => week} end
解説:
cwday で週を数字化して月曜日が 基点になるように補正。日付を移動させる。
あとは基点月が所属する月から何周目かをカウントするだけ。
復帰値は月と何周目かの Hash 値。複数の復帰値が返せる curl や scala が便利と感じる。
*よくテストしていないので、BUGがあるかもしれません。
0 件のコメント:
コメントを投稿