time-helper 1.2 → 1.3
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.
- data/README +21 -0
- data/lib/time-helper.rb +32 -17
- metadata +14 -3
data/README
CHANGED
@@ -31,3 +31,24 @@ using .add or .substract
|
|
31
31
|
| Time.local(2011,12,24,22,10,54) | add | {:year => 2, :month => 1 } | Time.local(2011,12,24,22,10,54) + (2*60*60*24*365 + 60*60*24*30) |
|
32
32
|
| Time.local(2012,05,01,12,20,31) | substract | {:month => 2, :day => 3} | Time.local(2012,05,01,12,20,31) - (60*60*24*30*2 + 60*60*24*3)|
|
33
33
|
| Time.local(2011,12,24,22,10,54) | add | {:day => 1, :hour => 3} |Time.local(2011,12,24,22,10,54) + (60*60*24 + 60*60*3) |
|
34
|
+
|
35
|
+
|
36
|
+
**********************************************
|
37
|
+
*How is this diferent than just "Time.parse"?*
|
38
|
+
**********************************************
|
39
|
+
|
40
|
+
Time.parse does not work well with non-American formats, if like me, you're working with strings that have dates in a for
|
41
|
+
mat like: DD/MM/YYYY Time.parse will not do. In fact, if you rewrite strtotime so it just calls parse a few of the tests
|
42
|
+
included will fail.
|
43
|
+
|
44
|
+
|
45
|
+
New in 1.3:
|
46
|
+
Added support for time strings in the format you'd usualy pass to Time.parse
|
47
|
+
Added utc_parse method for the lazy, it parses the date and converts it to utc
|
48
|
+
|
49
|
+
New in 1.2
|
50
|
+
Tomorrow and Yesterday methods
|
51
|
+
|
52
|
+
New in 1.1
|
53
|
+
I skiped this version.... because I suck at versioning
|
54
|
+
|
data/lib/time-helper.rb
CHANGED
@@ -1,26 +1,33 @@
|
|
1
|
-
#@version 1.
|
1
|
+
#@version 1.3.0
|
2
2
|
#@author Arthur
|
3
3
|
class Time
|
4
|
+
require 'time'
|
4
5
|
#class methods
|
5
6
|
class << self
|
6
|
-
#@param string [String] a datetime string with many possible formats
|
7
|
+
#@param string [String] a datetime string with many possible formats
|
7
8
|
#@see Time#valid_datetime? or the feature file for valid format
|
8
9
|
#@return [Time] set in the date of the string passed
|
9
10
|
def strtotime string
|
10
|
-
|
11
|
+
unless valid_datetime? string
|
12
|
+
begin
|
13
|
+
return Time.parse(string)
|
14
|
+
rescue
|
15
|
+
raise InvalidTimeStringFormat
|
16
|
+
end
|
17
|
+
end
|
11
18
|
h,m,s = 0,0,0
|
12
19
|
|
13
20
|
if date_or_dt( string ) == :datetime
|
14
21
|
separator = dt_get_separator string
|
15
22
|
date, time = 0, 0
|
16
|
-
if separator
|
23
|
+
if separator
|
17
24
|
date, time = string.split( separator )
|
18
25
|
else
|
19
26
|
date, time = string[0..7], string[8..13]
|
20
27
|
end
|
21
28
|
h,m,s = get_time_array time
|
22
29
|
string = date
|
23
|
-
end
|
30
|
+
end
|
24
31
|
separator = get_separator string
|
25
32
|
order = get_order string
|
26
33
|
if separator
|
@@ -28,7 +35,7 @@ class Time
|
|
28
35
|
if order == :dmy
|
29
36
|
return Time.local( yd, mo, dy,h,m,s )
|
30
37
|
elsif order == :ymd
|
31
|
-
return Time.local( dy, mo, yd,h,m,s)
|
38
|
+
return Time.local( dy, mo, yd,h,m,s)
|
32
39
|
end
|
33
40
|
end
|
34
41
|
if order == :dmy
|
@@ -36,12 +43,12 @@ class Time
|
|
36
43
|
elsif order == :ymd
|
37
44
|
return Time.local( string[0..3].to_i, string[4..5].to_i, string[6..7].to_i,h,m,s )
|
38
45
|
end
|
39
|
-
|
46
|
+
|
40
47
|
end
|
41
48
|
#@param string [String] datetime string
|
42
|
-
#@return [Boolean]
|
49
|
+
#@return [Boolean]
|
43
50
|
def valid_datetime? string
|
44
|
-
return false unless string.match
|
51
|
+
return false unless string.match /^\d{2,4}.?\d{2}.?\d{2,4}(?:.?\d{2}:?\d{2}:?\d{2})?$/
|
45
52
|
return true
|
46
53
|
end
|
47
54
|
#@return [Time] Time object set 24 hours ago
|
@@ -52,6 +59,13 @@ class Time
|
|
52
59
|
def yesterday
|
53
60
|
return Time.now.substract(:day => 1 )
|
54
61
|
end
|
62
|
+
#Converts a Date in to utc format
|
63
|
+
#
|
64
|
+
#@param value [String]
|
65
|
+
#@return [Time] in UTC
|
66
|
+
def utc_parse value
|
67
|
+
Time.strtotime(value).utc
|
68
|
+
end
|
55
69
|
private
|
56
70
|
def get_time_array time
|
57
71
|
h,m,s = 0,0,0
|
@@ -99,12 +113,12 @@ class Time
|
|
99
113
|
#see Time#get_order
|
100
114
|
def get_dt_order string
|
101
115
|
separator = dt_get_separator string
|
102
|
-
if separator
|
116
|
+
if separator
|
103
117
|
return get_order( string.split( separator )[0] )
|
104
118
|
end
|
105
119
|
return get_order( string[0..7] )
|
106
120
|
end
|
107
|
-
|
121
|
+
|
108
122
|
#@param string [String] date string
|
109
123
|
#@return [symbol] order dmy or ymd
|
110
124
|
def get_order string
|
@@ -124,14 +138,14 @@ class Time
|
|
124
138
|
return no_separator_order string
|
125
139
|
end
|
126
140
|
end
|
127
|
-
|
141
|
+
|
128
142
|
#@param string [String] date string
|
129
143
|
#@return [symbol] order dmy or ymd
|
130
144
|
#@note called when no separator is found on string
|
131
145
|
#@note might not work well for years < 1970 or > 2020
|
132
146
|
#@note experimental
|
133
147
|
def no_separator_order string
|
134
|
-
if string[0..1].to_i <= 31 and string[2..3].to_i <= 12 and string[4..7].to_i >= 1970
|
148
|
+
if string[0..1].to_i <= 31 and string[2..3].to_i <= 12 and string[4..7].to_i >= 1970
|
135
149
|
return :dmy
|
136
150
|
elsif string[0..3].to_i >= 1970 and string[4..5].to_i and string[6..7].to_i <= 31
|
137
151
|
return :ymd
|
@@ -141,11 +155,11 @@ class Time
|
|
141
155
|
end
|
142
156
|
|
143
157
|
#@param params [Hash] hash of time to be added {:time => amount } (can take several at once)
|
144
|
-
#@return [Time] new time object with date set to the result
|
158
|
+
#@return [Time] new time object with date set to the result
|
145
159
|
# @example add time
|
146
160
|
# t = Time.now()
|
147
161
|
# t.add(:year => 1 ) #=> a time object set for 365 days from now
|
148
|
-
# t.add(:year => 2, :day => 1 ) #=> a time object set 731 days from now
|
162
|
+
# t.add(:year => 2, :day => 1 ) #=> a time object set 731 days from now
|
149
163
|
# accepts :year :month :day :minute :hour :second :week
|
150
164
|
def add params
|
151
165
|
seconds = get_seconds params
|
@@ -153,7 +167,7 @@ class Time
|
|
153
167
|
end
|
154
168
|
|
155
169
|
#@param params [Hash] hash of time to be added {:time => amount } (can take several at once)
|
156
|
-
#@return [Time] new time object with date set to the result
|
170
|
+
#@return [Time] new time object with date set to the result
|
157
171
|
# @example substract time
|
158
172
|
# t = Time.now()
|
159
173
|
# t.substract(:year => 1 ) returns a time object set for 365 days ago
|
@@ -163,7 +177,6 @@ class Time
|
|
163
177
|
seconds = get_seconds params
|
164
178
|
return self - seconds
|
165
179
|
end
|
166
|
-
|
167
180
|
private
|
168
181
|
#@note may not account for leap years etc
|
169
182
|
def get_seconds params
|
@@ -184,3 +197,5 @@ class Time
|
|
184
197
|
end
|
185
198
|
|
186
199
|
end
|
200
|
+
class InvalidTimeStringFormat < StandardError
|
201
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time-helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "1.
|
4
|
+
version: "1.3"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arthur Silva
|
@@ -9,11 +9,22 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-30 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: "Adds a few methods to the Time class, more significant:\n\n strtotime which returns a Time object based on a string.\n\n also methods add and substract that allow you to do some easy date math (doesn't take leap months/years into account)\n also tomorrow and yesterday methods witch are like Time.now +- 1 day
|
16
|
+
description: " Adds a few methods to the Time class, more significant:\n\n strtotime which returns a Time object based on a string.\n\n also methods add and substract that allow you to do some easy date math (doesn't take leap months/years into account)\n also tomorrow and yesterday methods witch are like Time.now +- 1 day\n\n\
|
17
|
+
**********************************************\n\
|
18
|
+
*How is this diferent than just \"Time.parse\"?*\n\
|
19
|
+
**********************************************\n\n\
|
20
|
+
Time.parse does not work well with non-American formats, if like me, you're working with strings that have dates in a format like: DD/MM/YYYY Time.parse will not do. In fact, if you rewrite strtotime so it just calls parse a few of the tests included will fail.\n\n\n\
|
21
|
+
New in 1.3:\n\
|
22
|
+
Added support for time strings in the format you'd usualy pass to Time.parse\n\
|
23
|
+
Added utc_parse method for the lazy, it parses the date and converts it to utc\n\n\
|
24
|
+
New in 1.2\n\
|
25
|
+
Tomorrow and Yesterday methods\n\n\
|
26
|
+
New in 1.1 \n\
|
27
|
+
I skiped this version.... because I suck at versioning \n\n"
|
17
28
|
email: awls99@gmail.com
|
18
29
|
executables: []
|
19
30
|
|