-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathtimeutil.go
More file actions
229 lines (192 loc) · 6.43 KB
/
Copy pathtimeutil.go
File metadata and controls
229 lines (192 loc) · 6.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
// Package tu provides time utility functions to easily get time before or after of specific date time
package tu
import (
"time"
)
var (
// Yesterday get yesterday datetime of given datetime
Yesterday TimeFunc = func(t time.Time) time.Time {
return t.AddDate(0, 0, -1)
}
// Tomorrow get tomorrow datetime of given datetime
Tomorrow TimeFunc = func(t time.Time) time.Time {
return t.AddDate(0, 0, 1)
}
// BeginningOfDay get beginning of day of given datetime
BeginningOfDay TimeFunc = func(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
}
// EndOfDay get end of day of given datetime
EndOfDay TimeFunc = func(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 999999999, t.Location())
}
// BeginningOfWeek get beginning of week of given datetime
BeginningOfWeek TimeFunc = func(t time.Time) time.Time {
tt := BeginningOfDay(t).AddDate(0, 0, int(t.Weekday())*-1)
return time.Date(t.Year(), t.Month(), tt.Day(), 0, 0, 0, 0, t.Location())
}
// EndOfWeek get end of week of given datetime
EndOfWeek TimeFunc = func(t time.Time) time.Time {
tt := EndOfDay(t).AddDate(0, 0, 6-int(t.Weekday()))
return time.Date(t.Year(), t.Month(), tt.Day(), 23, 59, 59, 999999999, t.Location())
}
// BeginningOfMonth get beginning of month of given datetime
BeginningOfMonth TimeFunc = func(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
}
// EndOfMonth get end of month of given datetime
EndOfMonth TimeFunc = func(t time.Time) time.Time {
tt := BeginningOfMonth(t).AddDate(0, 1, 0).AddDate(0, 0, -1)
return time.Date(t.Year(), t.Month(), tt.Day(), 23, 59, 59, 999999999, t.Location())
}
// BeginningOfYear get beginning of year of given datetime
BeginningOfYear TimeFunc = func(t time.Time) time.Time {
return time.Date(t.Year(), 1, 1, 0, 0, 0, 0, t.Location())
}
// EndOfYear get end of year of given datetime
EndOfYear TimeFunc = func(t time.Time) time.Time {
return time.Date(t.Year(), 12, 31, 23, 59, 59, 999999999, t.Location())
}
)
// TimeFunc types of time utility function provides methods to compose utility functions
type TimeFunc func(time.Time) time.Time
// Yesterday composes Yesterday function with f TimeFunc function
func (f TimeFunc) Yesterday() TimeFunc {
return func(t time.Time) time.Time {
return Yesterday(f(t))
}
}
// Tomorrow composes Tomorrow function with f TimeFunc function
func (f TimeFunc) Tomorrow() TimeFunc {
return func(t time.Time) time.Time {
return Tomorrow(f(t))
}
}
// BeginningOfDay composes BeginningOfDay function with f TimeFunc function
func (f TimeFunc) BeginningOfDay() TimeFunc {
return func(t time.Time) time.Time {
return BeginningOfDay(f(t))
}
}
// EndOfDay composes EndOfDay function with f TimeFunc function
func (f TimeFunc) EndOfDay() TimeFunc {
return func(t time.Time) time.Time {
return EndOfDay(f(t))
}
}
// BeginningOfWeek composes BeginningOfWeek function with f TimeFunc function
func (f TimeFunc) BeginningOfWeek() TimeFunc {
return func(t time.Time) time.Time {
return BeginningOfWeek(f(t))
}
}
// EndOfWeek composes EndOfWeek function with f TimeFunc function
func (f TimeFunc) EndOfWeek() TimeFunc {
return func(t time.Time) time.Time {
return EndOfWeek(f(t))
}
}
// BeginningOfMonth composes BeginningOfMonth function with f TimeFunc function
func (f TimeFunc) BeginningOfMonth() TimeFunc {
return func(t time.Time) time.Time {
return BeginningOfMonth(f(t))
}
}
// EndOfMonth composes EndOfMonth function with f TimeFunc function
func (f TimeFunc) EndOfMonth() TimeFunc {
return func(t time.Time) time.Time {
return EndOfMonth(f(t))
}
}
// BeginningOfYear composes BeginningOfYear function with f TimeFunc function
func (f TimeFunc) BeginningOfYear() TimeFunc {
return func(t time.Time) time.Time {
return BeginningOfYear(f(t))
}
}
// EndOfYear composes EndOfYear function with f TimeFunc function
func (f TimeFunc) EndOfYear() TimeFunc {
return func(t time.Time) time.Time {
return EndOfYear(f(t))
}
}
// Of apply f TimeFunc function with given datetime
func (f TimeFunc) Of(t time.Time) time.Time {
return f(t)
}
// Num provides method to easily get time before or after of specific date time with N number time duration
type Num int
// SecondsAgo provides TimeFunc function to get n seconds ago
func (n Num) SecondsAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(-int(n)) * time.Second)
}
}
// SecondsLater provides TimeFunc function to get n seconds later
func (n Num) SecondsLater() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(int(n)) * time.Second)
}
}
// MinutesAgo provides TimeFunc function to get n minutes ago
func (n Num) MinutesAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(-int(n)) * time.Minute)
}
}
// MinutesLater provides TimeFunc function to get n minutes later
func (n Num) MinutesLater() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(int(n)) * time.Minute)
}
}
// HoursAgo provides TimeFunc function to get n hours ago
func (n Num) HoursAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(-int(n)) * time.Hour)
}
}
// HoursLater provides TimeFunc function to get n hours later
func (n Num) HoursLater() TimeFunc {
return func(t time.Time) time.Time {
return t.Add(time.Duration(int(n)) * time.Hour)
}
}
// DaysAgo provides TimeFunc function to get n days ago
func (n Num) DaysAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(0, 0, -int(n))
}
}
// DaysLater provides TimeFunc function to get n days later
func (n Num) DaysLater() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(0, 0, int(n))
}
}
// MonthsAgo provides TimeFunc function to get n months ago
func (n Num) MonthsAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(0, -int(n), 0)
}
}
// MonthsLater provides TimeFunc function to get n months later
func (n Num) MonthsLater() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(0, int(n), 0)
}
}
// YearsAgo provides TimeFunc function to get n years ago
func (n Num) YearsAgo() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(-int(n), 0, 0)
}
}
// YearsLater provides TimeFunc function to get n years later
func (n Num) YearsLater() TimeFunc {
return func(t time.Time) time.Time {
return t.AddDate(int(n), 0, 0)
}
}
// N alias of Num
type N = Num