trading_day_jp 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +18 -1
- data/lib/trading_day_jp.rb +100 -5
- data/lib/trading_day_jp/version.rb +1 -1
- data/spec/trading_day_jp_spec.rb +188 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9205b753b14e42d931a01a8d90b46c9cd695e254
|
4
|
+
data.tar.gz: 94fa5f305d24b40632138dab2e3d51b859d4cadf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d895e9523bf4112b9af8d6163375b25567a65e01017c4135ed2f82a33703e8268d31c9f6209f316dd64217b229108d9fdf868ac997469de6ee208e8d561d63
|
7
|
+
data.tar.gz: d2d49ab97d15ab8a3a10ced316fddc703a393cb73fbc3584dcbb89a0019e6a141450510722eb05d7890c8772fc2c823f1fd8228e07ffd578510ea7b140252794
|
data/README.md
CHANGED
@@ -24,19 +24,36 @@ Or install it yourself as:
|
|
24
24
|
大発会〜大納会のうち、休日及び祝日でない日が該当します。
|
25
25
|
|
26
26
|
``` ruby
|
27
|
+
# 2014年12月30日は大納会
|
27
28
|
date = Date.new(2014, 12, 30)
|
28
29
|
|
29
30
|
date.trading_day_jp? # => true
|
30
31
|
TradingDayJp.open?(date) # => true
|
31
32
|
|
33
|
+
# 2014年12月31日は取引日でない
|
32
34
|
date = Date.new(2014, 12, 31)
|
33
35
|
|
34
36
|
date.trading_day_jp? # => false
|
35
37
|
TradingDayJp.open?(date) # => false
|
36
38
|
|
39
|
+
# 2014年9月23日は秋分の日
|
37
40
|
start = Date.new(2014, 9, 22)
|
38
41
|
last = Date.new(2014, 9, 26)
|
39
|
-
|
42
|
+
|
43
|
+
TradingDayJp.between(start, last)
|
44
|
+
# => [<Date: 2014-09-22>, <Date: 2014-09-24>, <Date: 2014-09-25>, <Date: 2014-09-26>]
|
45
|
+
|
46
|
+
# 2014年6月2日はその月の最初の取引日
|
47
|
+
date = Date.new(2014, 6, 10)
|
48
|
+
|
49
|
+
TradingDayJp.beginning_of_month(date) # => <Date: 2014-06-02>
|
50
|
+
|
51
|
+
# 2014年8月29日はその月の最後の取引日
|
52
|
+
date = Date.new(2014, 8, 10)
|
53
|
+
|
54
|
+
TradingDayJp.end_of_month(date) # => <Date: 2014-08-29>
|
55
|
+
|
56
|
+
# 他にもメソッドあります
|
40
57
|
```
|
41
58
|
|
42
59
|
## Contributing
|
data/lib/trading_day_jp.rb
CHANGED
@@ -2,14 +2,109 @@ require "trading_day_jp/date"
|
|
2
2
|
|
3
3
|
module TradingDayJp
|
4
4
|
|
5
|
-
|
6
|
-
date.trading_day_jp?
|
7
|
-
end
|
5
|
+
class << self
|
8
6
|
|
9
|
-
|
10
|
-
(start..last).select do |date|
|
7
|
+
def open?(date)
|
11
8
|
date.trading_day_jp?
|
12
9
|
end
|
10
|
+
|
11
|
+
def next(date)
|
12
|
+
loop do
|
13
|
+
date = date + 1
|
14
|
+
|
15
|
+
return date if date.trading_day_jp?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def prev(date)
|
20
|
+
loop do
|
21
|
+
date = date - 1
|
22
|
+
|
23
|
+
return date if date.trading_day_jp?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def between(start, last)
|
28
|
+
(start..last).select do |date|
|
29
|
+
date.trading_day_jp?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def beginning_of_month(date)
|
34
|
+
date = Date.new(date.year, date.month)
|
35
|
+
|
36
|
+
loop do
|
37
|
+
return date if date.trading_day_jp?
|
38
|
+
|
39
|
+
date = date + 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def end_of_month(date)
|
44
|
+
date = Date.new(date.year, date.month).next_month - 1
|
45
|
+
|
46
|
+
loop do
|
47
|
+
return date if date.trading_day_jp?
|
48
|
+
|
49
|
+
date = date - 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def beginning_of_month?(date)
|
54
|
+
date == beginning_of_month(date)
|
55
|
+
end
|
56
|
+
|
57
|
+
def end_of_month?(date)
|
58
|
+
date == end_of_month(date)
|
59
|
+
end
|
60
|
+
|
61
|
+
def beginning_of_quarter(date)
|
62
|
+
if date.month <= 3
|
63
|
+
beginning_of_month Date.new(date.year, 1)
|
64
|
+
elsif date.month <= 6
|
65
|
+
beginning_of_month Date.new(date.year, 4)
|
66
|
+
elsif date.month <= 9
|
67
|
+
beginning_of_month Date.new(date.year, 7)
|
68
|
+
else
|
69
|
+
beginning_of_month Date.new(date.year, 10)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def end_of_quarter(date)
|
74
|
+
if date.month <= 3
|
75
|
+
end_of_month Date.new(date.year, 3)
|
76
|
+
elsif date.month <= 6
|
77
|
+
end_of_month Date.new(date.year, 6)
|
78
|
+
elsif date.month <= 9
|
79
|
+
end_of_month Date.new(date.year, 9)
|
80
|
+
else
|
81
|
+
end_of_month Date.new(date.year, 12)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def beginning_of_quarter?(date)
|
86
|
+
date == beginning_of_quarter(date)
|
87
|
+
end
|
88
|
+
|
89
|
+
def end_of_quarter?(date)
|
90
|
+
date == end_of_quarter(date)
|
91
|
+
end
|
92
|
+
|
93
|
+
def beginning_of_year(date)
|
94
|
+
self.next(Date.new date.year)
|
95
|
+
end
|
96
|
+
|
97
|
+
def end_of_year(date)
|
98
|
+
prev beginning_of_year(Date.new(date.year + 1))
|
99
|
+
end
|
100
|
+
|
101
|
+
def beginning_of_year?(date)
|
102
|
+
date == beginning_of_year(date)
|
103
|
+
end
|
104
|
+
|
105
|
+
def end_of_year?(date)
|
106
|
+
date == end_of_year(date)
|
107
|
+
end
|
13
108
|
end
|
14
109
|
|
15
110
|
end
|
data/spec/trading_day_jp_spec.rb
CHANGED
@@ -12,6 +12,30 @@ describe TradingDayJp do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
describe '.next' do
|
16
|
+
it '次の取引日を取得する' do
|
17
|
+
date = Date.new 2014, 2, 10
|
18
|
+
next_date = date + 1
|
19
|
+
next_trading_day = TradingDayJp.next date
|
20
|
+
|
21
|
+
expect(next_date.trading_day_jp?).to eq false
|
22
|
+
expect(next_trading_day.trading_day_jp?).to eq true
|
23
|
+
expect(next_trading_day).to eq Date.new(2014, 2, 12)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.prev' do
|
28
|
+
it '前の取引日を取得する' do
|
29
|
+
date = Date.new 2014, 2, 12
|
30
|
+
prev_date = date - 1
|
31
|
+
prev_trading_day = TradingDayJp.prev date
|
32
|
+
|
33
|
+
expect(prev_date.trading_day_jp?).to eq false
|
34
|
+
expect(prev_trading_day.trading_day_jp?).to eq true
|
35
|
+
expect(prev_trading_day).to eq Date.new(2014, 2, 10)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
15
39
|
describe '.between' do
|
16
40
|
it '取引日でない日を含まない' do
|
17
41
|
start = Date.new 2014, 9, 22
|
@@ -25,4 +49,168 @@ describe TradingDayJp do
|
|
25
49
|
end
|
26
50
|
end
|
27
51
|
|
52
|
+
describe '.beginning_of_month' do
|
53
|
+
it 'その月の最初の取引日を取得する' do
|
54
|
+
date = Date.new 2014, 6, 10
|
55
|
+
|
56
|
+
expect(TradingDayJp.beginning_of_month date).to eq Date.new(2014, 6, 2)
|
57
|
+
end
|
58
|
+
|
59
|
+
context '月初' do
|
60
|
+
it do
|
61
|
+
date = Date.new 2014, 5, 1
|
62
|
+
|
63
|
+
expect(TradingDayJp.beginning_of_month date).to eq date
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '.end_of_month' do
|
69
|
+
it 'その月の最後の取引日を取得する' do
|
70
|
+
date = Date.new 2014, 8, 10
|
71
|
+
|
72
|
+
expect(TradingDayJp.end_of_month date).to eq Date.new(2014, 8, 29)
|
73
|
+
end
|
74
|
+
|
75
|
+
context '月末' do
|
76
|
+
it do
|
77
|
+
date = Date.new 2014, 6, 30
|
78
|
+
|
79
|
+
expect(TradingDayJp.end_of_month date).to eq date
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '.beginning_of_month?' do
|
85
|
+
it do
|
86
|
+
date = Date.new 2014, 6, 2
|
87
|
+
|
88
|
+
expect(TradingDayJp.beginning_of_month? date).to eq true
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '.end_of_month?' do
|
93
|
+
it do
|
94
|
+
date = Date.new 2014, 8, 29
|
95
|
+
|
96
|
+
expect(TradingDayJp.end_of_month? date).to eq true
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '.beginning_of_quarter' do
|
101
|
+
context '3月' do
|
102
|
+
it do
|
103
|
+
date = Date.new 2014, 3, 1
|
104
|
+
|
105
|
+
expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 1, 6)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context '6月' do
|
110
|
+
it do
|
111
|
+
date = Date.new 2014, 6, 1
|
112
|
+
|
113
|
+
expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 4, 1)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context '9月' do
|
118
|
+
it do
|
119
|
+
date = Date.new 2014, 9, 1
|
120
|
+
|
121
|
+
expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 7, 1)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context '12月' do
|
126
|
+
it do
|
127
|
+
date = Date.new 2014, 12, 1
|
128
|
+
|
129
|
+
expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 10, 1)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '.end_of_quarter' do
|
135
|
+
context '1月' do
|
136
|
+
it do
|
137
|
+
date = Date.new 2014, 1, 1
|
138
|
+
|
139
|
+
expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 3, 31)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context '4月' do
|
144
|
+
it do
|
145
|
+
date = Date.new 2014, 4, 1
|
146
|
+
|
147
|
+
expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 6, 30)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context '7月' do
|
152
|
+
it do
|
153
|
+
date = Date.new 2014, 7, 1
|
154
|
+
|
155
|
+
expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 9, 30)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context '10月' do
|
160
|
+
it do
|
161
|
+
date = Date.new 2014, 10, 1
|
162
|
+
|
163
|
+
expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 12, 30)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe '.beginning_of_quarter?' do
|
169
|
+
it do
|
170
|
+
date = Date.new 2014, 4, 1
|
171
|
+
|
172
|
+
expect(TradingDayJp.beginning_of_quarter? date).to eq true
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe '.end_of_quarter?' do
|
177
|
+
it do
|
178
|
+
date = Date.new 2014, 3, 31
|
179
|
+
|
180
|
+
expect(TradingDayJp.end_of_quarter? date).to eq true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
describe '.beginning_of_year' do
|
185
|
+
it 'その年の最初の取引日を取得する' do
|
186
|
+
date = Date.new 2014, 6, 10
|
187
|
+
|
188
|
+
expect(TradingDayJp.beginning_of_year date).to eq Date.new(2014, 1, 6)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe '.end_of_year' do
|
193
|
+
it 'その年の最後の取引日を取得する' do
|
194
|
+
date = Date.new 2014, 6, 10
|
195
|
+
|
196
|
+
expect(TradingDayJp.end_of_year date).to eq Date.new(2014, 12, 30)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
describe '.beginning_of_year?' do
|
201
|
+
it do
|
202
|
+
date = Date.new 2014, 1, 6
|
203
|
+
|
204
|
+
expect(TradingDayJp.beginning_of_year? date).to eq true
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
describe '.end_of_year?' do
|
209
|
+
it do
|
210
|
+
date = Date.new 2014, 12, 30
|
211
|
+
|
212
|
+
expect(TradingDayJp.end_of_year? date).to eq true
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
28
216
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trading_day_jp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takehiko Shinkura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|