teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

月に関する仕様齟齬を反映 + 微調整

2018/09/01 03:07

投稿

takumiabe
takumiabe

スコア661

answer CHANGED
@@ -14,11 +14,11 @@
14
14
 
15
15
  ...
16
16
 
17
- day, month, year = *elm.split('/').reverse
17
+ day, month, year = *elm.split('/').map(&:to_i).reverse
18
18
  month ||= today.month
19
19
  year ||= today.year
20
20
  d = Date.new(year, month, day)
21
- d = d.next_year if elm_date < today # 過去の日付になったら翌年
21
+ d = d.next_year if d < today # 過去の日付になったら翌年
22
22
  ```
23
23
 
24
24
  とすれば、目的の日付が1つ得られると思います。
@@ -26,4 +26,29 @@
26
26
  - 分割代入を上手く使うとデータの分解が上手にできることが多いです
27
27
  - デフォルト値を取り扱う時は、`||=` が活きます。
28
28
 
29
- あたりがポイントかと思います。
29
+ あたりがポイントかと思います。
30
+
31
+ ---
32
+
33
+ 条件を誤読していたので修正します。
34
+ 前に設定された情報の中に「月」等があれば、継続してそれを用いる、ということなので、
35
+
36
+
37
+ ```rb
38
+ today = Date.today
39
+ prev_month = nil
40
+
41
+ array1.each do |elem|
42
+ day, month, year = *elem.split('/').map(&:to_i).reverse
43
+ month ||= prev_month || raise("一度もmonthが指定されなかった")
44
+ year ||= today.year
45
+
46
+ d = Date.new(year, month, day)
47
+ d = d.next_year if d < today # 過去の日付になったら翌年
48
+
49
+ prev_month = d.month # 次のelemの処理のために保持
50
+ array2 << d
51
+ end
52
+ ```
53
+
54
+ というところかと思います。