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

質問編集履歴

5

微調整

2018/08/30 16:47

投稿

blue_1997
blue_1997

スコア9

title CHANGED
File without changes
body CHANGED
@@ -29,11 +29,17 @@
29
29
  else
30
30
  day = elm
31
31
  end
32
+
32
- array2 << year + "/" + month + "/" + day
33
+ d = Time.strptime(year + "/" + month + "/" + day, "%Y/%m/%d").strftime("%Y/%m/%d")
34
+ array2 << d
33
35
  end
36
+ #=> ["2018/12/28",
37
+ "2018/12/30",
38
+ "2018/12/31",
39
+ "2019/01/01",
40
+ "2019/01/02",
41
+ "2019/01/04"]
34
42
 
35
- pp array2
36
- #=> ["2018/12/28", "2018/12/30", "2018/12/31", "2019/1/1", "2019/1/2", "2019/1/4"]
37
43
  ```
38
44
 
39
45
  一応できたのですが、どうも強引な感じがして、もっと上手い書き方を知りたいです。

4

一応できたのですが、どうも強引な感じがして、もっと上手い書き方を知りたいです。

2018/08/30 16:47

投稿

blue_1997
blue_1997

スコア9

title CHANGED
File without changes
body CHANGED
@@ -9,18 +9,19 @@
9
9
  ```ruby
10
10
  array1 = ["12/28", "30", "31", "1/1", "2", "4"]
11
11
 
12
- this_year = Time.now.strftime("%Y")
12
+ this_year = Time.now.strftime("%Y") #=> "2018"
13
- this_month = Time.now.strftime("%m")
13
+ this_month = Time.now.strftime("%m") #=> "08"
14
14
  year = ""
15
15
  month = ""
16
16
 
17
17
  array2 = []
18
18
  array1.each do |elm|
19
19
  if elm.match(/^(\d{1,2})/(\d{1,2})$/)
20
- month = $1
20
+ month = $1 #=> ex. "12", "1"
21
21
  day = $2
22
+
22
- if "#1月以降だったら"
23
+ if month.to_i <= this_month.to_i #=> ex. 12 <= 8, 1 <= 8
23
- year = (this_year.to_i + 1).to_s
24
+ year = (this_year.to_i + 1).to_s #=> "2019"
24
25
  else
25
26
  year = this_year
26
27
  end
@@ -30,6 +31,9 @@
30
31
  end
31
32
  array2 << year + "/" + month + "/" + day
32
33
  end
34
+
35
+ pp array2
36
+ #=> ["2018/12/28", "2018/12/30", "2018/12/31", "2019/1/1", "2019/1/2", "2019/1/4"]
33
37
  ```
34
38
 
35
- 1月以降だっらとい条件わかりませんでした。
39
+ 一応できのですが、ども強引な感じがして、もっと上手い書き方を知りいです

3

1月以降の場合の、.to_s 追加

2018/08/30 16:37

投稿

blue_1997
blue_1997

スコア9

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,7 @@
20
20
  month = $1
21
21
  day = $2
22
22
  if "#1月以降だったら"
23
- year = this_year.to_i + 1
23
+ year = (this_year.to_i + 1).to_s
24
24
  else
25
25
  year = this_year
26
26
  end

2

array1をコードに転載

2018/08/30 16:19

投稿

blue_1997
blue_1997

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,14 +1,14 @@
1
1
  Rails5で、下記 array1 を元に、array2 を生成したいです。シンプルな方法を教えて下さい。
2
2
 
3
-
4
3
  ```ruby
5
4
  array1 = ["12/28", "30", "31", "1/1", "2", "4"]
6
-
7
5
  array2 = ["2018/12/28", "2018/12/30", "2018/12/31", "2019/01/01", "2019/01/02", "2019/01/04"]
8
6
  ```
9
7
  2018年というのは今年で、2019年は来年(未来)という想定です。
10
8
 
11
9
  ```ruby
10
+ array1 = ["12/28", "30", "31", "1/1", "2", "4"]
11
+
12
12
  this_year = Time.now.strftime("%Y")
13
13
  this_month = Time.now.strftime("%m")
14
14
  year = ""

1

わかる範囲でコードを記載しました。

2018/08/30 16:15

投稿

blue_1997
blue_1997

スコア9

title CHANGED
File without changes
body CHANGED
@@ -8,4 +8,28 @@
8
8
  ```
9
9
  2018年というのは今年で、2019年は来年(未来)という想定です。
10
10
 
11
+ ```ruby
12
+ this_year = Time.now.strftime("%Y")
13
+ this_month = Time.now.strftime("%m")
14
+ year = ""
15
+ month = ""
16
+
17
+ array2 = []
18
+ array1.each do |elm|
19
+ if elm.match(/^(\d{1,2})/(\d{1,2})$/)
20
+ month = $1
21
+ day = $2
22
+ if "#1月以降だったら"
23
+ year = this_year.to_i + 1
24
+ else
25
+ year = this_year
26
+ end
27
+
28
+ else
29
+ day = elm
30
+ end
31
+ array2 << year + "/" + month + "/" + day
32
+ end
33
+ ```
34
+
11
- 何卒、よろしくお願いいす m(_ _)m
35
+ 1月以降だっらという条件がわかりせんでした。