-
Notifications
You must be signed in to change notification settings - Fork 0
/
time_between.go
67 lines (59 loc) · 1.22 KB
/
time_between.go
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
package utils
import (
"encoding/json"
"fmt"
"time"
)
type TimeStringBetween struct {
Src []string
start time.Time
end time.Time
}
func NewTimeStringBetween(data []byte) (*TimeStringBetween, error) {
t := &TimeStringBetween{}
err := json.Unmarshal(data, t)
if err != nil {
return nil, err
}
return t, nil
}
func (t *TimeStringBetween) MarshalJSON() ([]byte, error) {
return json.Marshal(t.Src)
}
func (t *TimeStringBetween) UnmarshalJSON(data []byte) error {
err := json.Unmarshal(data, &t.Src)
if err != nil {
return err
}
if len(t.Src) != 2 {
return fmt.Errorf("invalid length")
}
var (
timezone = "Asia/Shanghai"
tmp = make([]time.Time, 2)
date = time.Now().Format("2006-01-02")
)
for i, s := range t.Src {
tmp[i], err = ParseWithLocation(timezone, fmt.Sprintf("%s %s:00", date, s))
if err != nil {
return err
}
}
if tmp[0].Before(tmp[1]) {
t.start = tmp[0]
t.end = tmp[1]
} else {
t.start = tmp[1]
t.end = tmp[0]
}
return nil
}
func (t *TimeStringBetween) Between(target time.Time) bool {
return target.After(t.start) && target.Before(t.end)
}
func (t *TimeStringBetween) End() time.Time {
return t.end
}
func (t *TimeStringBetween) Start() time.Time {
return t.start
}