date-formats 0.2.2 → 1.0.2
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/Manifest.txt +1 -0
- data/README.md +52 -3
- data/Rakefile +2 -4
- data/lib/date-formats.rb +14 -5
- data/lib/date-formats/formats.rb +132 -18
- data/lib/date-formats/names.rb +58 -53
- data/lib/date-formats/parser.rb +4 -2
- data/lib/date-formats/version.rb +2 -2
- data/lib/date/formats.rb +4 -1
- data/test/test_parse.rb +5 -0
- data/test/test_parse_de.rb +11 -1
- data/test/test_parse_en.rb +23 -12
- data/test/test_parse_es.rb +14 -6
- data/test/test_parse_pt.rb +12 -0
- data/test/test_week.rb +114 -0
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29983784dc5d76dd11c233430a3aee08701a711a
|
4
|
+
data.tar.gz: a2fb38dd99f5b98b924516dcf1c9f39c32fb6c20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 584abc31598b6d1eef8ffa87610122ef2df398b9b537d2fe33e704b6c2554e511526cdc9d337330e5ac70d09d9f1a34278d586f310acd593f8fa81c23ebf81f3
|
7
|
+
data.tar.gz: cb10a5e2c39a0d707f735214aeb5de52473b90619bf62f859b0217a8c0d8e19b6cb4448bed2442a52ef9c77559e5608bb38dbff7f1c233d68681ef0ddc954ba5
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -44,6 +44,54 @@ DateFormats.parse( 'Lundi 1 Janvier', lang: 'fr')
|
|
44
44
|
#=> <Date: 2019-01-01 ((2458485j,0s,0n),+0s,2299161j)>
|
45
45
|
```
|
46
46
|
|
47
|
+
Pre-configured date formats for now include:
|
48
|
+
|
49
|
+
**Base - Work for All Languages**
|
50
|
+
|
51
|
+
- `YYYY_MM_DD_hh_mm` e.g. 2020-01-19 22:00 or 2020-1-19 22:00
|
52
|
+
- `YYYY_MM_DD` e.g. 2020-01-19 or 2020-1-19
|
53
|
+
- `DD_MM_YYYY_hh_mm` e.g. 19.01.2020 22.00 or 19.1.2020 22:00
|
54
|
+
- `DD_MM_hh_mm` e.g. 19.01. 22.00 or 19.1. 22:00
|
55
|
+
- `DD_MM_YYYY` e.g. 19.01.2020 or 19.1.2020
|
56
|
+
- `DD_MM` e.g. 19.01. or 19.1.
|
57
|
+
|
58
|
+
**English (`en`)**
|
59
|
+
|
60
|
+
- `DD_MONTH_YYYY_hh_mm` e.g. 19 Jan 2020 22:00
|
61
|
+
- `MONTH_DD_YYYY_hh_mm` e.g. Jan 19 2020 22:00 or Jan 19, 2020 22:00
|
62
|
+
- `MONTH_DD_hh_mm` e.g. Jan 19 22:00
|
63
|
+
- `MONTH_DD_YYYY` e.g. Jan 19 2020 or Jan 19, 2020 or January 19, 2020
|
64
|
+
- `DAY_MONTH_DD` e.g. Sun Jan 19 or Sun, Jan 19 or Sunday, January 19
|
65
|
+
- `MONTH_DD` e.g. Jan 19 or Jan/19
|
66
|
+
- `DD_MONTH` e.g. 19 Jan or 19/Jan
|
67
|
+
|
68
|
+
**Spanish / Español (`es`)**
|
69
|
+
|
70
|
+
- `DAY_DD_MONTH_hh_mm` e.g. Dom 19 Ene 22:00 or Dom 19 Ene 22h00
|
71
|
+
- `DAY_DD_MONTH` e.g. Dom 19 Ene or Dom 19 Enero
|
72
|
+
- `DD_MONTH` e.g. 19 Ene
|
73
|
+
- `DAY_DD_MM` e.g. Dom 19.01. or Dom 19.1.
|
74
|
+
|
75
|
+
**Portuguese / Português (`pt`)**
|
76
|
+
|
77
|
+
- `DD_MM_YYYY_DAY` e.g. 19/1/2020 Domenica
|
78
|
+
- `DAY_DD_MONTH` e.g. Dom 19 Jan or Dom 19 Janeiro
|
79
|
+
- `DAY_DD_MM` e.g. Dom 19/01 or Dom 19/1
|
80
|
+
|
81
|
+
**French / Français (`fr`)**
|
82
|
+
|
83
|
+
- `DAY_DD_MONTH` e.g. Dim. 19 Janv or Dim. 19 Janvier
|
84
|
+
|
85
|
+
**Italian / Italiano (`it`)**
|
86
|
+
|
87
|
+
- `DAY_MM_DD` e.g. Dom. 19.1.
|
88
|
+
|
89
|
+
**German / Deutsch (`de`)**
|
90
|
+
|
91
|
+
- `DAY_MM_DD` e.g. So 19.1. or So 19.01.
|
92
|
+
|
93
|
+
|
94
|
+
|
47
95
|
How does it work?
|
48
96
|
The `date-formats` library uses text patterns (that is, regular expressions)
|
49
97
|
for defining and parsing new date formats.
|
@@ -55,7 +103,7 @@ For example, the Spanish date `1 Ene` gets matched by:
|
|
55
103
|
```ruby
|
56
104
|
/\b
|
57
105
|
(?<day>\d{1,2})
|
58
|
-
|
106
|
+
[ ]
|
59
107
|
(?<month_name>#{MONTH_ES})
|
60
108
|
\b/x
|
61
109
|
```
|
@@ -82,10 +130,10 @@ And the French date `Lundi 1 Janvier` gets matched by:
|
|
82
130
|
```ruby
|
83
131
|
/\b
|
84
132
|
(?<day_name>#{DAY_FR})
|
85
|
-
|
133
|
+
[ ]+
|
86
134
|
(?<day>\d{1,2})
|
87
135
|
\.? # note: make dot optional
|
88
|
-
|
136
|
+
[ ]+
|
89
137
|
(?<month_name>#{MONTH_FR})
|
90
138
|
\b/x
|
91
139
|
```
|
@@ -122,6 +170,7 @@ Décembre Déce Déc
|
|
122
170
|
And so on.
|
123
171
|
|
124
172
|
|
173
|
+
|
125
174
|
## License
|
126
175
|
|
127
176
|
The `date-formats` scripts are dedicated to the public domain.
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ Hoe.spec 'date-formats' do
|
|
8
8
|
self.summary = "date-formats - read / parse and print dates (and times) from around the world"
|
9
9
|
self.description = summary
|
10
10
|
|
11
|
-
self.urls =
|
11
|
+
self.urls = { home: 'https://github.com/sportdb/sport.db' }
|
12
12
|
|
13
13
|
self.author = 'Gerald Bauer'
|
14
14
|
self.email = 'opensport@googlegroups.com'
|
@@ -19,9 +19,7 @@ Hoe.spec 'date-formats' do
|
|
19
19
|
|
20
20
|
self.licenses = ['Public Domain']
|
21
21
|
|
22
|
-
self.extra_deps = [
|
23
|
-
['logutils', '>= 0.6.1'],
|
24
|
-
]
|
22
|
+
self.extra_deps = []
|
25
23
|
|
26
24
|
self.spec_extras = {
|
27
25
|
required_ruby_version: '>= 2.2.2'
|
data/lib/date-formats.rb
CHANGED
@@ -1,20 +1,29 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'pp'
|
4
2
|
require 'time'
|
5
3
|
require 'date'
|
6
4
|
|
7
|
-
## 3rd party libs/gems
|
8
|
-
require 'logutils'
|
9
|
-
|
10
5
|
|
11
6
|
###
|
12
7
|
# our own code
|
13
8
|
require 'date-formats/version' # let version always go first
|
9
|
+
|
10
|
+
## todo/fix: make logging class configurable - lets you use logutils etc.
|
11
|
+
module DateFormats
|
12
|
+
module Logging
|
13
|
+
def logger() @logger ||= Logger.new; end
|
14
|
+
|
15
|
+
class Logger ## for now use quick "dummy" logger to
|
16
|
+
def debug( msg ) puts "[debug] #{msg}"; end
|
17
|
+
end # class Logger
|
18
|
+
end # module Logging
|
19
|
+
end # module DateFormats
|
20
|
+
|
21
|
+
|
14
22
|
require 'date-formats/reader'
|
15
23
|
require 'date-formats/names' ## month and day names (e.g. January,.. Monday,...)
|
16
24
|
|
17
25
|
|
26
|
+
|
18
27
|
module DateFormats
|
19
28
|
|
20
29
|
#############
|
data/lib/date-formats/formats.rb
CHANGED
@@ -6,6 +6,9 @@ module DateFormats
|
|
6
6
|
# e.g. 2012-09-14 20:30 => YYYY-MM-DD HH:MM
|
7
7
|
# note: allow 2012-9-3 7:30 e.g. no leading zero required
|
8
8
|
# regex_db
|
9
|
+
|
10
|
+
## todo/fix: add rule with allowed / separator (e.g. 2019/12/11)
|
11
|
+
## BUT must be used in all following case too (NO mix'n'match allowed e.g. 2019-11/12)
|
9
12
|
DB__DATE_TIME_RE = /\b
|
10
13
|
(?<year>\d{4})
|
11
14
|
-
|
@@ -14,7 +17,7 @@ DB__DATE_TIME_RE = /\b
|
|
14
17
|
(?<day>\d{1,2})
|
15
18
|
\s+
|
16
19
|
(?<hours>\d{1,2})
|
17
|
-
|
20
|
+
[:.hH]
|
18
21
|
(?<minutes>\d{2})
|
19
22
|
\b/x
|
20
23
|
|
@@ -42,7 +45,7 @@ DD_MM_YYYY__DATE_TIME_RE = /\b
|
|
42
45
|
(?<year>\d{4})
|
43
46
|
\s+
|
44
47
|
(?<hours>\d{1,2})
|
45
|
-
[:.]
|
48
|
+
[:.hH]
|
46
49
|
(?<minutes>\d{2})
|
47
50
|
\b/x
|
48
51
|
|
@@ -57,7 +60,7 @@ DD_MM__DATE_TIME_RE = /\b
|
|
57
60
|
\.
|
58
61
|
\s+
|
59
62
|
(?<hours>\d{1,2})
|
60
|
-
[:.]
|
63
|
+
[:.hH]
|
61
64
|
(?<minutes>\d{2})
|
62
65
|
\b/x
|
63
66
|
|
@@ -86,6 +89,7 @@ DD_MM__DATE_RE = /\b
|
|
86
89
|
|
87
90
|
##
|
88
91
|
# e.g. 12 May 2013 14:00 => D|DD.MMM.YYYY H|HH:MM
|
92
|
+
# or 12 May 2013 14h00
|
89
93
|
EN__DD_MONTH_YYYY__DATE_TIME_RE = /\b
|
90
94
|
(?<day>\d{1,2})
|
91
95
|
\s
|
@@ -94,7 +98,7 @@ EN__DD_MONTH_YYYY__DATE_TIME_RE = /\b
|
|
94
98
|
(?<year>\d{4})
|
95
99
|
\s+
|
96
100
|
(?<hours>\d{1,2})
|
97
|
-
:
|
101
|
+
[:hH]
|
98
102
|
(?<minutes>\d{2})
|
99
103
|
\b/x
|
100
104
|
|
@@ -105,44 +109,71 @@ EN__DD_MONTH__DATE_RE = /\b
|
|
105
109
|
(?<month_name>#{MONTH_EN})
|
106
110
|
\b/x
|
107
111
|
|
108
|
-
# e.g. Fri Aug/9
|
112
|
+
# e.g. Fri Aug/9 or Fri Aug 9
|
113
|
+
# Fri, Aug/9 or Fri, Aug 9
|
109
114
|
EN__DAY_MONTH_DD__DATE_RE = /\b
|
110
115
|
(?<day_name>#{DAY_EN})
|
116
|
+
,? # note: allow optional comma
|
111
117
|
\s
|
112
118
|
(?<month_name>#{MONTH_EN})
|
113
|
-
|
119
|
+
(?: \/|\s )
|
114
120
|
(?<day>\d{1,2})
|
115
121
|
\b/x
|
116
122
|
|
117
|
-
|
123
|
+
|
124
|
+
# e.g. Fri Aug/9 18:00 or Fri Aug 9 18:00
|
125
|
+
# Fri, Aug/9 18:00 or Fri, Aug 9 18:00
|
126
|
+
EN__DAY_MONTH_DD__DATE_TIME_RE = /\b
|
127
|
+
(?<day_name>#{DAY_EN})
|
128
|
+
,? # note: allow optional comma
|
129
|
+
\s
|
130
|
+
(?<month_name>#{MONTH_EN})
|
131
|
+
(?: \/|\s )
|
132
|
+
(?<day>\d{1,2})
|
133
|
+
\s+
|
134
|
+
(?<hours>\d{1,2})
|
135
|
+
[:hH]
|
136
|
+
(?<minutes>\d{2})
|
137
|
+
\b/x
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
# e.g. Jun/12 2011 14:00 or
|
142
|
+
# Jun 12, 2011 14:00 or
|
143
|
+
# Jun 12, 2011 14h00
|
118
144
|
EN__MONTH_DD_YYYY__DATE_TIME_RE = /\b
|
119
145
|
(?<month_name>#{MONTH_EN})
|
120
|
-
|
146
|
+
(?: \/|\s )
|
121
147
|
(?<day>\d{1,2})
|
148
|
+
,? # note: allow optional comma
|
122
149
|
\s
|
123
150
|
(?<year>\d{4})
|
124
151
|
\s+
|
125
152
|
(?<hours>\d{1,2})
|
126
|
-
:
|
153
|
+
[:hH]
|
127
154
|
(?<minutes>\d{2})
|
128
155
|
\b/x
|
129
156
|
|
130
157
|
# e.g. Jun/12 14:00 w/ implied year H|HH:MM
|
158
|
+
# or Jun 12 14h00
|
131
159
|
EN__MONTH_DD__DATE_TIME_RE = /\b
|
132
160
|
(?<month_name>#{MONTH_EN})
|
133
|
-
|
161
|
+
(?: \/|\s )
|
134
162
|
(?<day>\d{1,2})
|
135
163
|
\s+
|
136
164
|
(?<hours>\d{1,2})
|
137
|
-
:
|
165
|
+
[:hH]
|
138
166
|
(?<minutes>\d{2})
|
139
167
|
\b/x
|
140
168
|
|
141
169
|
# e.g. Jun/12 2013
|
170
|
+
# or Jun 12 2013
|
171
|
+
# or Jun 12, 2013
|
142
172
|
EN__MONTH_DD_YYYY__DATE_RE = /\b
|
143
173
|
(?<month_name>#{MONTH_EN})
|
144
|
-
|
174
|
+
(?: \/|\s )
|
145
175
|
(?<day>\d{1,2})
|
176
|
+
,? # note: allow optional comma
|
146
177
|
\s
|
147
178
|
(?<year>\d{4})
|
148
179
|
\b/x
|
@@ -152,14 +183,17 @@ EN__MONTH_DD_YYYY__DATE_RE = /\b
|
|
152
183
|
# -- fix: might eat french weekday mar 12 is mardi (mar) !!! see FR__ pattern
|
153
184
|
# fix: remove space again for now - and use simple en date reader or something!!!
|
154
185
|
## was [\/ ] changed back to \/
|
186
|
+
|
187
|
+
## check if [\/ ] works!!!! in \x mode ??
|
155
188
|
EN__MONTH_DD__DATE_RE = /\b
|
156
189
|
(?<month_name>#{MONTH_EN})
|
157
|
-
|
190
|
+
(?: \/|\s )
|
158
191
|
(?<day>\d{1,2})
|
159
192
|
\b/x
|
160
193
|
|
161
194
|
|
162
195
|
|
196
|
+
|
163
197
|
# e.g. 12 Ene w/ implied year
|
164
198
|
ES__DD_MONTH__DATE_RE = /\b
|
165
199
|
(?<day>\d{1,2})
|
@@ -167,9 +201,34 @@ ES__DD_MONTH__DATE_RE = /\b
|
|
167
201
|
(?<month_name>#{MONTH_ES})
|
168
202
|
\b/x
|
169
203
|
|
204
|
+
# e.g. Vie 12 Ene w/ implied year
|
205
|
+
ES__DAY_DD_MONTH__DATE_RE = /\b
|
206
|
+
(?<day_name>#{DAY_ES})
|
207
|
+
\.? # note: make dot optional
|
208
|
+
\s
|
209
|
+
(?<day>\d{1,2})
|
210
|
+
\s
|
211
|
+
(?<month_name>#{MONTH_ES})
|
212
|
+
\b/x
|
213
|
+
|
214
|
+
# e.g. Sáb 5 Ene 19:30
|
215
|
+
ES__DAY_DD_MONTH__DATE_TIME_RE = /\b
|
216
|
+
(?<day_name>#{DAY_ES})
|
217
|
+
\.? # note: make dot optional
|
218
|
+
\s
|
219
|
+
(?<day>\d{1,2})
|
220
|
+
\s
|
221
|
+
(?<month_name>#{MONTH_ES})
|
222
|
+
\s+
|
223
|
+
(?<hours>\d{1,2})
|
224
|
+
[:hH]
|
225
|
+
(?<minutes>\d{2})
|
226
|
+
\b/x
|
227
|
+
|
228
|
+
|
170
229
|
# e.g. Vie. 16.8. or Sáb. 17.8.
|
171
230
|
# or Vie 16.8. or Sáb 17.8.
|
172
|
-
|
231
|
+
ES__DAY_DD_MM__DATE_RE = /\b
|
173
232
|
(?<day_name>#{DAY_ES})
|
174
233
|
\.? # note: make dot optional
|
175
234
|
\s
|
@@ -218,19 +277,67 @@ PT__DD_MM_YYYY_DAY__DATE_RE = /\b
|
|
218
277
|
(?<day_name>#{DAY_PT})
|
219
278
|
\b/x
|
220
279
|
|
280
|
+
# e.g. Sáb, 13/Maio or Qui, 08/Junho
|
281
|
+
# or Sáb 13 Maio or Qui 8 Junho
|
282
|
+
PT__DAY_DD_MONTH__DATE_RE = /\b
|
283
|
+
(?<day_name>#{DAY_PT})
|
284
|
+
\.? # note: make dot optional
|
285
|
+
,? # note: allow optional comma too
|
286
|
+
\s
|
287
|
+
(?<day>\d{1,2})
|
288
|
+
(?: \/|\s )
|
289
|
+
(?<month_name>#{MONTH_PT})
|
290
|
+
\b/x
|
291
|
+
|
292
|
+
# e.g. Sáb, 29/07 or Seg, 31/07
|
293
|
+
# Sáb 29/07 or Seg 31/07
|
294
|
+
PT__DAY_DD_MM__DATE_RE = /\b
|
295
|
+
(?<day_name>#{DAY_PT})
|
296
|
+
\.? # note: make dot optional
|
297
|
+
,? # note: allow optional comma too
|
298
|
+
\s
|
299
|
+
(?<day>\d{1,2})
|
300
|
+
\/
|
301
|
+
(?<month>\d{1,2})
|
302
|
+
\b/x
|
303
|
+
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
# e.g. Sa., 16.5., 18.00 Uhr or Mo., 18.5., 20.30 Uhr
|
308
|
+
# Sa 16.5. 18.00 or Mo 18.5. 20.30
|
309
|
+
DE__DAY_MM_DD__DATE_TIME_RE = /\b
|
310
|
+
(?<day_name>#{DAY_DE})
|
311
|
+
\.? # note: make dot optional
|
312
|
+
,? # note: allow optional comma too
|
313
|
+
[ ]*
|
314
|
+
(?<day>\d{1,2})
|
315
|
+
\.
|
316
|
+
(?<month>\d{1,2})
|
317
|
+
\.
|
318
|
+
,? # note: allow optional comma too
|
319
|
+
[ ]*
|
320
|
+
(?<hours>\d{1,2})
|
321
|
+
\.
|
322
|
+
(?<minutes>\d{2})
|
323
|
+
(?:[ ]*
|
324
|
+
uhr
|
325
|
+
)? ## note: allow optional Uhr
|
326
|
+
(?=[ \]]|$)/ix ## note: allow end-of-string/line too/x
|
221
327
|
|
222
328
|
# e.g. Fr. 26.7. or Sa. 27.7.
|
223
329
|
# or Fr 26.7. or Sa 27.7.
|
330
|
+
# or Fr, 26.7. or Sa, 27.7.
|
224
331
|
DE__DAY_MM_DD__DATE_RE = /\b
|
225
332
|
(?<day_name>#{DAY_DE})
|
226
333
|
\.? # note: make dot optional
|
334
|
+
,? # note: allow optional comma too
|
227
335
|
\s
|
228
336
|
(?<day>\d{1,2})
|
229
337
|
\.
|
230
338
|
(?<month>\d{1,2})
|
231
339
|
\.
|
232
|
-
(
|
233
|
-
|
340
|
+
(?=[ \]]|$)/x ## note: allow end-of-string/line too/x
|
234
341
|
|
235
342
|
|
236
343
|
#############################################
|
@@ -246,11 +353,12 @@ FORMATS_BASE = [ ### all numbers (no month names or weekday) - find a better
|
|
246
353
|
]
|
247
354
|
|
248
355
|
FORMATS_EN = [
|
356
|
+
[ EN__DAY_MONTH_DD__DATE_TIME_RE, '[EN_DAY_MONTH_DD_hh_mm]' ],
|
249
357
|
[ EN__DD_MONTH_YYYY__DATE_TIME_RE, '[EN_DD_MONTH_YYYY_hh_mm]' ],
|
250
358
|
[ EN__MONTH_DD_YYYY__DATE_TIME_RE, '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
251
359
|
[ EN__MONTH_DD__DATE_TIME_RE, '[EN_MONTH_DD_hh_mm]' ],
|
252
360
|
[ EN__MONTH_DD_YYYY__DATE_RE, '[EN_MONTH_DD_YYYY]' ],
|
253
|
-
[ EN__DAY_MONTH_DD__DATE_RE, '[EN_DAY_MONTH_DD]'
|
361
|
+
[ EN__DAY_MONTH_DD__DATE_RE, '[EN_DAY_MONTH_DD]' ],
|
254
362
|
[ EN__MONTH_DD__DATE_RE, '[EN_MONTH_DD]' ],
|
255
363
|
[ EN__DD_MONTH__DATE_RE, '[EN_DD_MONTH]' ],
|
256
364
|
]
|
@@ -260,15 +368,21 @@ FORMATS_FR = [
|
|
260
368
|
]
|
261
369
|
|
262
370
|
FORMATS_ES = [
|
371
|
+
[ ES__DAY_DD_MONTH__DATE_TIME_RE, '[ES_DAY_DD_MONTH_hh_mm]' ],
|
372
|
+
[ ES__DAY_DD_MONTH__DATE_RE, '[ES_DAY_DD_MONTH]' ],
|
263
373
|
[ ES__DD_MONTH__DATE_RE, '[ES_DD_MONTH]' ],
|
264
|
-
[
|
374
|
+
[ ES__DAY_DD_MM__DATE_RE, '[ES_DAY_DD_MM]' ],
|
265
375
|
]
|
266
376
|
|
377
|
+
|
267
378
|
FORMATS_PT = [
|
268
379
|
[ PT__DD_MM_YYYY_DAY__DATE_RE, '[PT_DD_MM_YYYY_DAY]' ],
|
380
|
+
[ PT__DAY_DD_MONTH__DATE_RE, '[PT_DAY_DD_MONTH]' ],
|
381
|
+
[ PT__DAY_DD_MM__DATE_RE, '[PT_DAY_DD_MM]' ],
|
269
382
|
]
|
270
383
|
|
271
384
|
FORMATS_DE = [
|
385
|
+
[ DE__DAY_MM_DD__DATE_TIME_RE, '[DE_DAY_MM_DD_hh_mm]' ],
|
272
386
|
[ DE__DAY_MM_DD__DATE_RE, '[DE_DAY_MM_DD]' ],
|
273
387
|
]
|
274
388
|
|
data/lib/date-formats/names.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
module DateFormats
|
2
2
|
|
3
|
+
###
|
4
|
+
# sources:
|
5
|
+
## see https://web.library.yale.edu/cataloging/months
|
6
|
+
## and others
|
7
|
+
|
3
8
|
# todo: make more generic for reuse
|
4
9
|
### fix:
|
5
10
|
## use date/en.txt or en.txt etc. -- why? why not?
|
@@ -27,13 +32,13 @@ TXT
|
|
27
32
|
|
28
33
|
|
29
34
|
DAY_NAMES[:en] = <<TXT
|
30
|
-
Monday
|
31
|
-
Tuesday
|
32
|
-
Wednesday
|
35
|
+
Monday Mon Mo
|
36
|
+
Tuesday Tues Tue Tu
|
37
|
+
Wednesday Wed We
|
33
38
|
Thursday Thurs Thur Thu Th
|
34
|
-
Friday
|
35
|
-
Saturday
|
36
|
-
Sunday
|
39
|
+
Friday Fri Fr
|
40
|
+
Saturday Sat Sa
|
41
|
+
Sunday Sun Su
|
37
42
|
TXT
|
38
43
|
|
39
44
|
|
@@ -65,31 +70,31 @@ TXT
|
|
65
70
|
|
66
71
|
|
67
72
|
MONTH_NAMES[:es] = <<TXT
|
68
|
-
Enero
|
69
|
-
Febrero
|
70
|
-
Marzo
|
71
|
-
Abril
|
72
|
-
Mayo
|
73
|
-
Junio
|
74
|
-
Julio
|
75
|
-
Agosto
|
76
|
-
Septiembre Sept Sep
|
77
|
-
Octubre
|
78
|
-
Noviembre
|
79
|
-
Diciembre
|
73
|
+
Enero Ene
|
74
|
+
Febrero Feb
|
75
|
+
Marzo Mar
|
76
|
+
Abril Abr
|
77
|
+
Mayo May
|
78
|
+
Junio Jun
|
79
|
+
Julio Jul
|
80
|
+
Agosto Ago
|
81
|
+
Septiembre Sept Sep Set ## check Set in use??
|
82
|
+
Octubre Oct
|
83
|
+
Noviembre Nov
|
84
|
+
Diciembre Dic
|
80
85
|
TXT
|
81
86
|
|
82
87
|
DAY_NAMES[:es] = <<TXT
|
83
|
-
Lunes Lun
|
84
|
-
Martes Mar
|
85
|
-
Miércoles Mié Mi
|
86
|
-
Jueves Jue
|
87
|
-
Viernes Vie
|
88
|
-
Sábado Sáb Sá
|
89
|
-
Domingo Dom
|
88
|
+
Lunes Lun Lu
|
89
|
+
Martes Mar Ma
|
90
|
+
Miércoles Mié Mie Mi # note: add unaccented variant (for abbreviation) - why? why not?
|
91
|
+
Jueves Jue Ju
|
92
|
+
Viernes Vie Vi
|
93
|
+
Sábado Sáb Sab Sá Sa # note: add unaccented variants (for abbreviations) - why? why not?
|
94
|
+
Domingo Dom Do
|
90
95
|
TXT
|
91
96
|
|
92
|
-
|
97
|
+
|
93
98
|
MONTH_NAMES[:de] = <<TXT
|
94
99
|
Jänner Januar Jan Jän # note: in Austria - Jänner; in Deutschland Januar allow both ??
|
95
100
|
Feber Februar Feb
|
@@ -114,21 +119,21 @@ Freitag Fr
|
|
114
119
|
Samstag Sa
|
115
120
|
Sonntag So
|
116
121
|
TXT
|
117
|
-
|
118
|
-
|
122
|
+
|
123
|
+
|
119
124
|
MONTH_NAMES[:it] = <<TXT
|
120
|
-
Gennaio
|
121
|
-
Febbraio
|
122
|
-
Marzo
|
123
|
-
Aprile
|
124
|
-
Maggio
|
125
|
+
Gennaio Genn
|
126
|
+
Febbraio Febbr
|
127
|
+
Marzo Mar
|
128
|
+
Aprile Apr
|
129
|
+
Maggio Magg
|
125
130
|
Giugno
|
126
131
|
Luglio
|
127
|
-
Agosto
|
128
|
-
Settembre
|
129
|
-
Ottobre
|
130
|
-
Novembre
|
131
|
-
Dicembre
|
132
|
+
Agosto Ag
|
133
|
+
Settembre Sett
|
134
|
+
Ottobre Ott
|
135
|
+
Novembre Nov
|
136
|
+
Dicembre Dic
|
132
137
|
TXT
|
133
138
|
|
134
139
|
DAY_NAMES[:it] = <<TXT
|
@@ -140,21 +145,21 @@ Venerdì Ven
|
|
140
145
|
Sabato Sab
|
141
146
|
Domenica Dom Do
|
142
147
|
TXT
|
143
|
-
|
148
|
+
|
144
149
|
|
145
150
|
MONTH_NAMES[:pt] = <<TXT
|
146
|
-
Janeiro
|
147
|
-
Fevereiro
|
151
|
+
Janeiro Jan
|
152
|
+
Fevereiro Fev
|
148
153
|
Março
|
149
154
|
Abril
|
150
155
|
Maio
|
151
156
|
Junho
|
152
157
|
Julho
|
153
158
|
Agosto
|
154
|
-
Setembro
|
155
|
-
Outubro
|
156
|
-
Novembro
|
157
|
-
Dezembro
|
159
|
+
Setembro Set
|
160
|
+
Outubro Out
|
161
|
+
Novembro Nov
|
162
|
+
Dezembro Dez
|
158
163
|
TXT
|
159
164
|
|
160
165
|
DAY_NAMES[:pt] = <<TXT
|
@@ -163,11 +168,11 @@ Terça-feira Ter
|
|
163
168
|
Quarta-feira Qua
|
164
169
|
Quinta-feira Qui
|
165
170
|
Sexta-feira Sex
|
166
|
-
Sábado Sab
|
171
|
+
Sábado Sáb Sab # note: add unaccented variant (for abbreviation) - why? why not?
|
167
172
|
Domingo Dom
|
168
173
|
TXT
|
169
|
-
|
170
|
-
|
174
|
+
|
175
|
+
|
171
176
|
MONTH_NAMES[:ro] = <<TXT
|
172
177
|
Ianuarie
|
173
178
|
Februarie
|
@@ -194,7 +199,7 @@ Duminică Du
|
|
194
199
|
TXT
|
195
200
|
|
196
201
|
|
197
|
-
|
202
|
+
|
198
203
|
DAY_NAMES[:nl] = <<TXT
|
199
204
|
Maandag Ma
|
200
205
|
Dinsdag Di
|
@@ -224,10 +229,10 @@ Péntek P
|
|
224
229
|
Szombat Szo
|
225
230
|
Vasárnap Vas
|
226
231
|
TXT
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
|
231
236
|
############################################
|
232
237
|
## convert (unparsed) text to (parsed) lines with words
|
233
238
|
MONTH_NAMES.each {|k,v| MONTH_NAMES[k] = parse_month(v) }
|
data/lib/date-formats/parser.rb
CHANGED
@@ -18,7 +18,7 @@ module DateFormats
|
|
18
18
|
|
19
19
|
## note: cache all "built-in" lang versions (e.g. formats == nil)
|
20
20
|
@@parser ||= {}
|
21
|
-
|
21
|
+
@@parser[ lang ] ||= DateParser.new( lang: lang )
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.parse( line,
|
@@ -37,9 +37,11 @@ module DateFormats
|
|
37
37
|
|
38
38
|
|
39
39
|
|
40
|
+
|
40
41
|
class DateParser
|
41
42
|
|
42
|
-
include
|
43
|
+
include Logging
|
44
|
+
|
43
45
|
|
44
46
|
def initialize( lang:,
|
45
47
|
formats: nil, month_names: nil, day_names: nil
|
data/lib/date-formats/version.rb
CHANGED
data/lib/date/formats.rb
CHANGED
data/test/test_parse.rb
CHANGED
@@ -12,7 +12,12 @@ class TestParse < MiniTest::Test
|
|
12
12
|
def test_date
|
13
13
|
data = [
|
14
14
|
[ '19.01.2013 22.00', '2013-01-19 22:00', '[DD_MM_YYYY_hh_mm]' ],
|
15
|
+
[ '19.01.2013 22h00', '2013-01-19 22:00', '[DD_MM_YYYY_hh_mm]' ],
|
16
|
+
[ '19.01.2013 22:00', '2013-01-19 22:00', '[DD_MM_YYYY_hh_mm]' ],
|
15
17
|
[ '21.01.2013 21.30', '2013-01-21 21:30', '[DD_MM_YYYY_hh_mm]' ],
|
18
|
+
[ '21.01.2013 21:30', '2013-01-21 21:30', '[DD_MM_YYYY_hh_mm]' ],
|
19
|
+
[ '21.01.2013 21H30', '2013-01-21 21:30', '[DD_MM_YYYY_hh_mm]' ],
|
20
|
+
|
16
21
|
[ '26.01.2013', '2013-01-26', '[DD_MM_YYYY]' ],
|
17
22
|
[ '[26.01.2013]', '2013-01-26', '[[DD_MM_YYYY]]' ],
|
18
23
|
[ '[21.1.]', '2013-01-21', '[[DD_MM]]' ]
|
data/test/test_parse_de.rb
CHANGED
@@ -14,10 +14,20 @@ class TestParseDe < MiniTest::Test
|
|
14
14
|
[ 'Fr. 26.7.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
15
15
|
[ 'Fr. 26.07.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
16
16
|
[ 'Fr 26.7.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
17
|
+
[ 'Fr., 26.07.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
18
|
+
[ 'Fr, 26.7.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
17
19
|
[ '[Fr. 26.7.]', '2019-07-26', '[[DE_DAY_MM_DD]]' ],
|
20
|
+
|
21
|
+
[ 'Sa., 16.5., 18.00 Uhr', '2019-05-16 18:00', '[DE_DAY_MM_DD_hh_mm]' ],
|
22
|
+
[ 'Sa 16.5. 18.00', '2019-05-16 18:00', '[DE_DAY_MM_DD_hh_mm]' ],
|
23
|
+
[ '[Sa., 16.5., 18.00 Uhr]', '2019-05-16 18:00', '[[DE_DAY_MM_DD_hh_mm]]' ],
|
24
|
+
[ '[Sa 16.5. 18.00]', '2019-05-16 18:00', '[[DE_DAY_MM_DD_hh_mm]]' ],
|
25
|
+
|
26
|
+
[ 'Mo., 18.5., 20.30 Uhr', '2019-05-18 20:30', '[DE_DAY_MM_DD_hh_mm]' ],
|
27
|
+
[ 'Mo 18.5. 20.30', '2019-05-18 20:30', '[DE_DAY_MM_DD_hh_mm]' ],
|
18
28
|
]
|
19
29
|
|
20
|
-
assert_dates( data, start: Date.new( 2019,
|
30
|
+
assert_dates( data, start: Date.new( 2019, 1, 1 ), lang: 'de' )
|
21
31
|
end
|
22
32
|
|
23
33
|
end # class TestParseDe
|
data/test/test_parse_en.rb
CHANGED
@@ -11,18 +11,29 @@ class TestParseEn < MiniTest::Test
|
|
11
11
|
|
12
12
|
def test_date
|
13
13
|
data = [
|
14
|
-
[ 'Jun/12 2011 14:00',
|
15
|
-
[ '
|
16
|
-
|
17
|
-
[ '
|
18
|
-
[ '
|
19
|
-
|
20
|
-
|
21
|
-
[ '
|
22
|
-
[ '
|
23
|
-
|
24
|
-
[ '
|
25
|
-
[ '
|
14
|
+
[ 'Jun/12 2011 14:00', '2011-06-12 14:00', '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
15
|
+
[ 'Jun 12 2011 14:00', '2011-06-12 14:00', '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
16
|
+
[ 'Jun 12, 2011 14h00', '2011-06-12 14:00', '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
17
|
+
[ 'Oct/12 2013 16:00', '2013-10-12 16:00', '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
18
|
+
[ 'Oct 12, 2013 16H00', '2013-10-12 16:00', '[EN_MONTH_DD_YYYY_hh_mm]' ],
|
19
|
+
|
20
|
+
[ 'Jan/26 2011', '2011-01-26', '[EN_MONTH_DD_YYYY]' ],
|
21
|
+
[ 'Jan/26, 2011', '2011-01-26', '[EN_MONTH_DD_YYYY]' ],
|
22
|
+
[ 'Jan 26, 2011', '2011-01-26', '[EN_MONTH_DD_YYYY]' ],
|
23
|
+
|
24
|
+
[ 'Jan/26', '2013-01-26', '[EN_MONTH_DD]' ],
|
25
|
+
[ 'Jan 26', '2013-01-26', '[EN_MONTH_DD]' ],
|
26
|
+
[ 'Jun/13', '2013-06-13', '[EN_MONTH_DD]' ],
|
27
|
+
|
28
|
+
[ '26 January', '2013-01-26', '[EN_DD_MONTH]' ],
|
29
|
+
[ '13 June', '2013-06-13', '[EN_DD_MONTH]' ],
|
30
|
+
|
31
|
+
[ 'Fri Aug/9', '2013-08-09', '[EN_DAY_MONTH_DD]' ],
|
32
|
+
[ 'Fri Aug 9', '2013-08-09', '[EN_DAY_MONTH_DD]' ],
|
33
|
+
[ 'Fri, Aug 9', '2013-08-09', '[EN_DAY_MONTH_DD]' ],
|
34
|
+
[ '[Fri Aug/9]', '2013-08-09', '[[EN_DAY_MONTH_DD]]' ],
|
35
|
+
[ '[Fri Aug 9]', '2013-08-09', '[[EN_DAY_MONTH_DD]]' ],
|
36
|
+
[ '[Fri, Aug 9]', '2013-08-09', '[[EN_DAY_MONTH_DD]]' ],
|
26
37
|
]
|
27
38
|
|
28
39
|
assert_dates( data, start: Date.new( 2013, 1, 1 ), lang: 'en' )
|
data/test/test_parse_es.rb
CHANGED
@@ -11,13 +11,21 @@ class TestParseEs < MiniTest::Test
|
|
11
11
|
|
12
12
|
def test_date
|
13
13
|
data = [
|
14
|
-
[ '12 Ene',
|
15
|
-
[ '[12 Ene]',
|
14
|
+
[ '12 Ene', '2019-01-12', '[ES_DD_MONTH]' ],
|
15
|
+
[ '[12 Ene]', '2019-01-12', '[[ES_DD_MONTH]]' ],
|
16
16
|
|
17
|
-
[ 'Sáb. 17.8.',
|
18
|
-
[ 'Sáb. 17.08.',
|
19
|
-
[ 'Sáb 17.8.',
|
20
|
-
[ '[Sáb 17.8.]',
|
17
|
+
[ 'Sáb. 17.8.', '2019-08-17', '[ES_DAY_DD_MM]' ],
|
18
|
+
[ 'Sáb. 17.08.', '2019-08-17', '[ES_DAY_DD_MM]' ],
|
19
|
+
[ 'Sáb 17.8.', '2019-08-17', '[ES_DAY_DD_MM]' ],
|
20
|
+
[ '[Sáb 17.8.]', '2019-08-17', '[[ES_DAY_DD_MM]]' ],
|
21
|
+
|
22
|
+
[ 'Sáb 5 Ene', '2019-01-05', '[ES_DAY_DD_MONTH]'],
|
23
|
+
[ 'Sáb. 05 Ene', '2019-01-05', '[ES_DAY_DD_MONTH]'],
|
24
|
+
[ '[Sáb 5 Ene]', '2019-01-05', '[[ES_DAY_DD_MONTH]]'],
|
25
|
+
|
26
|
+
[ 'Sáb 5 Ene 19:30', '2019-01-05 19:30', '[ES_DAY_DD_MONTH_hh_mm]'],
|
27
|
+
[ 'Sáb. 05 Ene 19:30', '2019-01-05 19:30', '[ES_DAY_DD_MONTH_hh_mm]'],
|
28
|
+
[ 'Sáb. 5 Ene 19h30', '2019-01-05 19:30', '[ES_DAY_DD_MONTH_hh_mm]'],
|
21
29
|
]
|
22
30
|
|
23
31
|
assert_dates( data, start: Date.new( 2019, 1, 1 ), lang: 'es' )
|
data/test/test_parse_pt.rb
CHANGED
@@ -18,6 +18,18 @@ class TestParsePt < MiniTest::Test
|
|
18
18
|
[ '09/04/2003 - Quarta-feira', '2003-04-09', '[PT_DD_MM_YYYY_DAY]' ],
|
19
19
|
[ '9/4/2003 Quarta-feira', '2003-04-09', '[PT_DD_MM_YYYY_DAY]' ],
|
20
20
|
[ '[9/4/2003 Quarta-feira]', '2003-04-09', '[[PT_DD_MM_YYYY_DAY]]' ],
|
21
|
+
|
22
|
+
[ 'Sáb, 13/Maio', '2003-05-13', '[PT_DAY_DD_MONTH]' ],
|
23
|
+
[ 'Sáb 13 Maio', '2003-05-13', '[PT_DAY_DD_MONTH]' ],
|
24
|
+
|
25
|
+
[ 'Qui, 08/Junho', '2003-06-08', '[PT_DAY_DD_MONTH]' ],
|
26
|
+
[ 'Qui 8 Junho', '2003-06-08', '[PT_DAY_DD_MONTH]' ],
|
27
|
+
|
28
|
+
[ 'Sáb, 29/07', '2003-07-29', '[PT_DAY_DD_MM]' ],
|
29
|
+
[ 'Sáb 29/7', '2003-07-29', '[PT_DAY_DD_MM]' ],
|
30
|
+
|
31
|
+
[ 'Seg, 31/07', '2003-07-31', '[PT_DAY_DD_MM]' ],
|
32
|
+
[ 'Seg 31/7', '2003-07-31', '[PT_DAY_DD_MM]' ],
|
21
33
|
]
|
22
34
|
|
23
35
|
assert_dates( data, start: Date.new( 2003, 1, 1 ), lang: 'pt' )
|
data/test/test_week.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_week.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestWeek < MiniTest::Test
|
11
|
+
|
12
|
+
def test_2016_17
|
13
|
+
assert_equal 51, Date.parse( '2016-12-25').cweek # Sun Dec 25
|
14
|
+
assert_equal 52, Date.parse( '2016-12-26').cweek # Mon Dec 26
|
15
|
+
assert_equal 52, Date.parse( '2016-12-31').cweek # Sat Dec 31
|
16
|
+
|
17
|
+
assert_equal 52, Date.parse( '2017-01-01').cweek # Sun Jan 1
|
18
|
+
assert_equal 1, Date.parse( '2017-01-02').cweek # Mon Jan 2
|
19
|
+
assert_equal 1, Date.parse( '2017-01-03').cweek # Tue Jan 3
|
20
|
+
assert_equal 1, Date.parse( '2017-01-08').cweek # Sun Jan 8
|
21
|
+
assert_equal 2, Date.parse( '2017-01-09').cweek # Mon Jan 9
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_2017_18
|
25
|
+
assert_equal 51, Date.parse( '2017-12-24').cweek # Sun Dec 24
|
26
|
+
assert_equal 52, Date.parse( '2017-12-25').cweek # Mon Dec 25
|
27
|
+
assert_equal 52, Date.parse( '2017-12-31').cweek # Sun Dec 31
|
28
|
+
|
29
|
+
assert_equal 1, Date.parse( '2018-01-01').cweek # Mon Jan 1
|
30
|
+
assert_equal 1, Date.parse( '2018-01-02').cweek # Tue Jan 2
|
31
|
+
assert_equal 1, Date.parse( '2018-01-07').cweek # Sun Jan 7
|
32
|
+
assert_equal 2, Date.parse( '2018-01-09').cweek # Mon Jan 8
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_2018_19
|
36
|
+
assert_equal 52, Date.parse( '2018-12-29').cweek # Sat Dec 29
|
37
|
+
assert_equal 52, Date.parse( '2018-12-30').cweek # Sun Dec 30
|
38
|
+
assert_equal 1, Date.parse( '2018-12-31').cweek # Mon Dec 31
|
39
|
+
|
40
|
+
assert_equal 1, Date.parse( '2019-01-01').cweek # Tue Jan 1
|
41
|
+
assert_equal 1, Date.parse( '2019-01-02').cweek # Wed Jan 2
|
42
|
+
assert_equal 1, Date.parse( '2019-01-06').cweek # Sun Jan 6
|
43
|
+
assert_equal 2, Date.parse( '2019-01-07').cweek # Mon Jan 7
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_2019_20
|
47
|
+
assert_equal 52, Date.parse( '2019-12-29').cweek
|
48
|
+
assert_equal 1, Date.parse( '2019-12-30').cweek
|
49
|
+
|
50
|
+
assert_equal 1, Date.parse( '2020-01-01').cweek
|
51
|
+
assert_equal 1, Date.parse( '2020-01-05').cweek
|
52
|
+
assert_equal 2, Date.parse( '2020-01-06').cweek
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_2020_21 ## note: 2020 has 53 (!) weeks
|
56
|
+
assert_equal 52, Date.parse( '2020-12-27').cweek
|
57
|
+
assert_equal 53, Date.parse( '2020-12-28').cweek # 1/7-Mon
|
58
|
+
assert_equal 53, Date.parse( '2020-12-29').cweek # 2/7-Tue
|
59
|
+
assert_equal 53, Date.parse( '2020-12-30').cweek # 3/7-Wed
|
60
|
+
assert_equal 53, Date.parse( '2020-12-31').cweek # 4/7-Thu
|
61
|
+
|
62
|
+
assert_equal 53, Date.parse( '2021-01-01').cweek # 5/7-Fri
|
63
|
+
assert_equal 53, Date.parse( '2021-01-02').cweek # 6/7-Sat
|
64
|
+
assert_equal 53, Date.parse( '2021-01-03').cweek # 7/7-Sun
|
65
|
+
assert_equal 1, Date.parse( '2021-01-04').cweek
|
66
|
+
assert_equal 1, Date.parse( '2021-01-10').cweek
|
67
|
+
assert_equal 2, Date.parse( '2021-01-11').cweek
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def test_more_weeks
|
72
|
+
assert_equal 53, Date.parse('2004-12-31').cweek ## note: 2004 has 53(!) weeks
|
73
|
+
assert_equal 53, Date.parse('2005-01-01').cweek
|
74
|
+
assert_equal 53, Date.parse('2005-01-02').cweek
|
75
|
+
assert_equal 1, Date.parse('2005-01-03').cweek
|
76
|
+
|
77
|
+
assert_equal 52, Date.parse('2005-12-31').cweek
|
78
|
+
assert_equal 52, Date.parse('2006-01-01').cweek
|
79
|
+
assert_equal 1, Date.parse('2006-01-02').cweek
|
80
|
+
|
81
|
+
assert_equal 52, Date.parse('2006-12-31').cweek
|
82
|
+
assert_equal 1, Date.parse('2007-01-01').cweek
|
83
|
+
|
84
|
+
assert_equal 52, Date.parse('2007-12-30').cweek
|
85
|
+
assert_equal 1, Date.parse('2007-12-31').cweek
|
86
|
+
assert_equal 1, Date.parse('2008-01-01').cweek
|
87
|
+
|
88
|
+
assert_equal 52, Date.parse('2008-12-28').cweek
|
89
|
+
assert_equal 1, Date.parse('2008-12-29').cweek
|
90
|
+
assert_equal 1, Date.parse('2008-12-30').cweek
|
91
|
+
assert_equal 1, Date.parse('2008-12-31').cweek
|
92
|
+
assert_equal 1, Date.parse('2009-01-01').cweek
|
93
|
+
|
94
|
+
assert_equal 53, Date.parse('2009-12-31').cweek ## note: 2009 has 53(!) weeks
|
95
|
+
assert_equal 53, Date.parse('2010-01-01').cweek
|
96
|
+
assert_equal 53, Date.parse('2010-01-02').cweek
|
97
|
+
assert_equal 53, Date.parse('2010-01-03').cweek
|
98
|
+
assert_equal 1, Date.parse('2010-01-04').cweek
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
assert_equal 52, Date.parse('2012-01-01').cweek
|
103
|
+
assert_equal 1, Date.parse('2012-12-31').cweek
|
104
|
+
assert_equal 1, Date.parse('2014-12-29').cweek
|
105
|
+
assert_equal 53, Date.parse('2015-12-31').cweek ## note: 2015 has 53(!) weeks
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
def test_today
|
110
|
+
assert_equal 31, Date.parse('2018-07-30').cweek # Mon Jul 30
|
111
|
+
assert_equal 31, Date.parse('2018-08-01').cweek
|
112
|
+
assert_equal 31, Date.parse('2018-08-05').cweek # Sun Aug 5
|
113
|
+
end
|
114
|
+
end # class TestWeek
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: date-formats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: logutils
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.6.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.6.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rdoc
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +69,7 @@ files:
|
|
83
69
|
- test/test_parse_it.rb
|
84
70
|
- test/test_parse_pt.rb
|
85
71
|
- test/test_version.rb
|
72
|
+
- test/test_week.rb
|
86
73
|
homepage: https://github.com/sportdb/sport.db
|
87
74
|
licenses:
|
88
75
|
- Public Domain
|