diff --git a/.gitignore b/.gitignore
index 114804c..8f33b64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,4 @@
.idea
.vscode
*.log
-gomod.sh
-/vendor/
+gomod.sh
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gorandom/.drone.yml b/vendor/go.dtapp.net/gorandom/.drone.yml
new file mode 100644
index 0000000..c56c479
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/.drone.yml
@@ -0,0 +1,17 @@
+kind: pipeline
+type: docker
+name: clone
+
+steps:
+ - name: Test
+ image: golang:1.18
+ commands:
+ - go env -w GO111MODULE=on
+ - go env -w GOPROXY=https://goproxy.cn,direct
+ - go test -v ./...
+ - name: Benchmark
+ image: golang:1.18
+ commands:
+ - go env -w GO111MODULE=on
+ - go env -w GOPROXY=https://goproxy.cn,direct
+ - go test -bench=. -benchmem
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gorandom/.gitignore b/vendor/go.dtapp.net/gorandom/.gitignore
new file mode 100644
index 0000000..4794692
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/.gitignore
@@ -0,0 +1,9 @@
+.env
+.git
+.svn
+.idea
+.vscode
+*.log
+goinit.sh
+gomod.sh
+/vendor/
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gorandom/LICENSE b/vendor/go.dtapp.net/gorandom/LICENSE
new file mode 100644
index 0000000..ff84bbf
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 李光春
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/go.dtapp.net/gorandom/README.md b/vendor/go.dtapp.net/gorandom/README.md
new file mode 100644
index 0000000..cdb34f5
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/README.md
@@ -0,0 +1,17 @@
+
+
+📦 Golang Random
+
+[comment]: <> (go)
+[![godoc](https://pkg.go.dev/badge/go.dtapp.net/gorandom?status.svg)](https://pkg.go.dev/go.dtapp.net/gorandom)
+[![goproxy.cn](https://goproxy.cn/stats/go.dtapp.net/gorandom/badges/download-count.svg)](https://goproxy.cn/stats/go.dtapp.net/gorandom)
+[![goreportcard.com](https://goreportcard.com/badge/go.dtapp.net/gorandom)](https://goreportcard.com/report/go.dtapp.net/gorandom)
+[![deps.dev](https://img.shields.io/badge/deps-go-red.svg)](https://deps.dev/go/go.dtapp.net%2Fgorandom)
+
+#### 安装
+
+```go
+go get -v -u go.dtapp.net/gorandom
+```
diff --git a/vendor/go.dtapp.net/gorandom/gorandom.go b/vendor/go.dtapp.net/gorandom/gorandom.go
new file mode 100644
index 0000000..34281cc
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/gorandom.go
@@ -0,0 +1,50 @@
+package gorandom
+
+import (
+ "math/rand"
+ "time"
+)
+
+const numbers string = "0123456789"
+const letters string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+const specials = "~!@#$%^*()_+-=[]{}|;:,./<>?"
+const alphanumerics string = letters + numbers
+const ascii string = alphanumerics + specials
+
+func random[T int | int64](n T, chars string) string {
+ if n <= 0 {
+ return ""
+ }
+ r := rand.New(rand.NewSource(time.Now().UnixNano()))
+ bytes := make([]byte, n, n)
+ l := len(chars)
+ var i T = 0
+ for {
+ if i >= n {
+ break
+ }
+ bytes[i] = chars[r.Intn(l)]
+ i++
+ }
+ return string(bytes)
+}
+
+// Alphanumeric 随机字母数字
+func Alphanumeric[T int | int64](n T) string {
+ return random(n, alphanumerics)
+}
+
+// Alphabetic 随机字母
+func Alphabetic[T int | int64](n T) string {
+ return random(n, letters)
+}
+
+// Numeric 随机数字
+func Numeric[T int | int64](n T) string {
+ return random(n, numbers)
+}
+
+// Ascii 随机ASCII
+func Ascii[T int | int64](n T) string {
+ return random(n, ascii)
+}
diff --git a/vendor/go.dtapp.net/gorandom/version.go b/vendor/go.dtapp.net/gorandom/version.go
new file mode 100644
index 0000000..2ea50d0
--- /dev/null
+++ b/vendor/go.dtapp.net/gorandom/version.go
@@ -0,0 +1,3 @@
+package gorandom
+
+const Version = "1.0.1"
diff --git a/vendor/go.dtapp.net/gotime/.drone.yml b/vendor/go.dtapp.net/gotime/.drone.yml
new file mode 100644
index 0000000..c56c479
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/.drone.yml
@@ -0,0 +1,17 @@
+kind: pipeline
+type: docker
+name: clone
+
+steps:
+ - name: Test
+ image: golang:1.18
+ commands:
+ - go env -w GO111MODULE=on
+ - go env -w GOPROXY=https://goproxy.cn,direct
+ - go test -v ./...
+ - name: Benchmark
+ image: golang:1.18
+ commands:
+ - go env -w GO111MODULE=on
+ - go env -w GOPROXY=https://goproxy.cn,direct
+ - go test -bench=. -benchmem
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gotime/.gitignore b/vendor/go.dtapp.net/gotime/.gitignore
new file mode 100644
index 0000000..2ee9f26
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/.gitignore
@@ -0,0 +1,7 @@
+.env
+.git
+.svn
+.idea
+.vscode
+.log
+gomod.sh
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gotime/LICENSE b/vendor/go.dtapp.net/gotime/LICENSE
new file mode 100644
index 0000000..ff84bbf
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 李光春
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/go.dtapp.net/gotime/README.md b/vendor/go.dtapp.net/gotime/README.md
new file mode 100644
index 0000000..82111e6
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/README.md
@@ -0,0 +1,17 @@
+
+
+📦 Golang 时间
+
+[comment]: <> (go)
+[![godoc](https://pkg.go.dev/badge/go.dtapp.net/gotime?status.svg)](https://pkg.go.dev/go.dtapp.net/gotime)
+[![goproxy.cn](https://goproxy.cn/stats/go.dtapp.net/gotime/badges/download-count.svg)](https://goproxy.cn/stats/go.dtapp.net/gotime)
+[![goreportcard.com](https://goreportcard.com/badge/go.dtapp.net/gotime)](https://goreportcard.com/report/go.dtapp.net/gotime)
+[![deps.dev](https://img.shields.io/badge/deps-go-red.svg)](https://deps.dev/go/go.dtapp.net%2Fgotime)
+
+#### 安装
+
+```go
+go get -v -u go.dtapp.net/gotime
+```
\ No newline at end of file
diff --git a/vendor/go.dtapp.net/gotime/compare.go b/vendor/go.dtapp.net/gotime/compare.go
new file mode 100644
index 0000000..bc89964
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/compare.go
@@ -0,0 +1,65 @@
+package gotime
+
+import "time"
+
+// Gt 是否大于
+func (p Pro) Gt(t2 time.Time) bool {
+ return p.Time.After(t2)
+}
+
+// Lt 是否小于
+func (p Pro) Lt(t2 time.Time) bool {
+ return p.Time.Before(t2)
+}
+
+// Eq 是否等于
+func (p Pro) Eq(t2 time.Time) bool {
+ return p.Time.Equal(t2)
+}
+
+// Ne 是否不等于
+func (p Pro) Ne(t2 time.Time) bool {
+ return !p.Eq(t2)
+}
+
+// Gte 是否大于等于
+func (p Pro) Gte(t2 time.Time) bool {
+ return p.Gt(t2) || p.Eq(t2)
+}
+
+// Lte 是否小于等于
+func (p Pro) Lte(t2 time.Time) bool {
+ return p.Lt(t2) || p.Eq(t2)
+}
+
+// Between 是否在两个时间之间(不包括这两个时间)
+func (p Pro) Between(start time.Time, end time.Time) bool {
+ if p.Gt(start) && p.Lt(end) {
+ return true
+ }
+ return false
+}
+
+// BetweenIncludedStart 是否在两个时间之间(包括开始时间)
+func (p Pro) BetweenIncludedStart(start time.Time, end time.Time) bool {
+ if p.Gte(start) && p.Lt(end) {
+ return true
+ }
+ return false
+}
+
+// BetweenIncludedEnd 是否在两个时间之间(包括结束时间)
+func (p Pro) BetweenIncludedEnd(start time.Time, end time.Time) bool {
+ if p.Gt(start) && p.Lte(end) {
+ return true
+ }
+ return false
+}
+
+// BetweenIncludedBoth 是否在两个时间之间(包括这两个时间)
+func (p Pro) BetweenIncludedBoth(start time.Time, end time.Time) bool {
+ if p.Gte(start) && p.Lte(end) {
+ return true
+ }
+ return false
+}
diff --git a/vendor/go.dtapp.net/gotime/differ.go b/vendor/go.dtapp.net/gotime/differ.go
new file mode 100644
index 0000000..0ad3033
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/differ.go
@@ -0,0 +1,69 @@
+package gotime
+
+import "time"
+
+// DiffInHour 相差多少小时
+func (p Pro) DiffInHour(t2 time.Time) (hour int64) {
+ t2.Before(p.Time)
+ diff := p.Time.Unix() - t2.Unix()
+ hour = diff / 3600
+ return hour
+}
+
+// DiffInHourWithAbs 相差多少小时(绝对值)
+func (p Pro) DiffInHourWithAbs(t2 time.Time) (hour int64) {
+ p.Time.Before(t2)
+ diff := t2.Unix() - p.Time.Unix()
+ hour = diff / 3600
+ if hour > 0 {
+ return hour
+ }
+ t2.Before(p.Time)
+ diff = p.Time.Unix() - t2.Unix()
+ hour = diff / 3600
+ return hour
+}
+
+// DiffInMinutes 相差多少分钟
+func (p Pro) DiffInMinutes(t2 time.Time) (hour int64) {
+ t2.Before(p.Time)
+ diff := p.Time.Unix() - t2.Unix()
+ hour = diff / 60
+ return hour
+}
+
+// DiffInMinutesWithAbs 相差多少分钟(绝对值)
+func (p Pro) DiffInMinutesWithAbs(t2 time.Time) (hour int64) {
+ p.Time.Before(t2)
+ diff := t2.Unix() - p.Time.Unix()
+ hour = diff / 60
+ if hour > 0 {
+ return hour
+ }
+ t2.Before(p.Time)
+ diff = p.Time.Unix() - t2.Unix()
+ hour = diff / 60
+ return hour
+}
+
+// DiffInSecond 相差多少秒
+func (p Pro) DiffInSecond(t2 time.Time) (hour int64) {
+ t2.Before(p.Time)
+ diff := p.Time.Unix() - t2.Unix()
+ hour = diff
+ return hour
+}
+
+// DiffInSecondWithAbs 相差多少秒(绝对值)
+func (p Pro) DiffInSecondWithAbs(t2 time.Time) (hour int64) {
+ p.Time.Before(t2)
+ diff := t2.Unix() - p.Time.Unix()
+ hour = diff
+ if hour > 0 {
+ return hour
+ }
+ t2.Before(p.Time)
+ diff = p.Time.Unix() - t2.Unix()
+ hour = diff
+ return hour
+}
diff --git a/vendor/go.dtapp.net/gotime/errors.go b/vendor/go.dtapp.net/gotime/errors.go
new file mode 100644
index 0000000..2f69622
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/errors.go
@@ -0,0 +1,8 @@
+package gotime
+
+import "fmt"
+
+// invalidTimezoneError 无效的时区错误
+var invalidTimezoneError = func(timezone string) error {
+ return fmt.Errorf("invalid timezone %q, please see the file %q for all valid timezones", timezone, "$GOROOT/lib/time/zoneinfo.zip")
+}
diff --git a/vendor/go.dtapp.net/gotime/gotime.go b/vendor/go.dtapp.net/gotime/gotime.go
new file mode 100644
index 0000000..9123a59
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/gotime.go
@@ -0,0 +1,105 @@
+package gotime
+
+import (
+ "fmt"
+ "time"
+)
+
+// 时间格式化常量
+const (
+ RFC3339Format = time.RFC3339
+ Iso8601Format = "2006-01-02T15:04:05-07:00"
+ CookieFormat = "Monday, 02-Jan-2006 15:04:05 MST"
+ RFC1036Format = "Mon, 02 Jan 06 15:04:05 -0700"
+ RFC7231Format = "Mon, 02 Jan 2006 15:04:05 GMT"
+ DayDateTimeFormat = "Mon, Jan 2, 2006 3:04 PM"
+ DateTimeFormat = "2006-01-02 15:04:05"
+ DateFormat = "2006-01-02"
+ TimeFormat = "15:04:05"
+ ShortDateTimeFormat = "20060102150405"
+ ShortDateFormat = "20060102"
+ ShortTimeFormat = "150405"
+)
+
+// Pro 结构体
+type Pro struct {
+ Time time.Time
+ loc *time.Location
+ Error error
+}
+
+// NewPro 初始化结构体
+func NewPro() Pro {
+ return Pro{
+ Time: time.Now(),
+ }
+}
+
+// BeforeSeconds 获取n秒前的时间
+func (p Pro) BeforeSeconds(seconds int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("-%ds", seconds))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// AfterSeconds 获取n秒后的时间
+func (p Pro) AfterSeconds(seconds int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("+%ds", seconds))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// BeforeMinute 获取n分钟前的时间
+func (p Pro) BeforeMinute(seconds int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("-%dm", seconds))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// AfterMinute 获取n分钟后的时间
+func (p Pro) AfterMinute(seconds int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("+%dm", seconds))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// BeforeHour 获取n小时前的时间
+func (p Pro) BeforeHour(hour int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("-%dh", hour))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// AfterHour 获取n小时后的时间
+func (p Pro) AfterHour(hour int64) Pro {
+ st, _ := time.ParseDuration(fmt.Sprintf("+%dh", hour))
+ p.Time = p.Time.Add(st)
+ return p
+}
+
+// BeforeDay 获取n天前的时间
+func (p Pro) BeforeDay(day int) Pro {
+ p.Time = p.Time.AddDate(0, 0, -day)
+ return p
+}
+
+// AfterDay 获取n天后的时间
+func (p Pro) AfterDay(day int) Pro {
+ p.Time = p.Time.AddDate(0, 0, day)
+ return p
+}
+
+// SetFormat 格式化
+func (p Pro) SetFormat(layout string) string {
+ return p.Time.Format(layout)
+}
+
+// Month 获取当前月
+func (p Pro) Month() int64 {
+ return p.MonthOfYear()
+}
+
+// MonthOfYear 获取本年的第几月
+func (p Pro) MonthOfYear() int64 {
+ return int64(p.Time.In(p.loc).Month())
+}
diff --git a/vendor/go.dtapp.net/gotime/location.go b/vendor/go.dtapp.net/gotime/location.go
new file mode 100644
index 0000000..1b664ab
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/location.go
@@ -0,0 +1,14 @@
+package gotime
+
+import (
+ "time"
+)
+
+// 通过时区获取 Location 实例
+func getLocationByTimezone(timezone string) (*time.Location, error) {
+ loc, err := time.LoadLocation(timezone)
+ if err != nil {
+ err = invalidTimezoneError(timezone)
+ }
+ return loc, err
+}
diff --git a/vendor/go.dtapp.net/gotime/mongo.go b/vendor/go.dtapp.net/gotime/mongo.go
new file mode 100644
index 0000000..314fe54
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/mongo.go
@@ -0,0 +1,6 @@
+package gotime
+
+// Bson mongoDB
+func (p Pro) Bson() string {
+ return p.Now().String()
+}
diff --git a/vendor/go.dtapp.net/gotime/start_end.go b/vendor/go.dtapp.net/gotime/start_end.go
new file mode 100644
index 0000000..5afb4f5
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/start_end.go
@@ -0,0 +1,124 @@
+package gotime
+
+import "time"
+
+// 数字常量
+const (
+ YearsPerMillennium = 1000 // 每千年1000年
+ YearsPerCentury = 100 // 每世纪100年
+ YearsPerDecade = 10 // 每十年10年
+ QuartersPerYear = 4 // 每年4季度
+ MonthsPerYear = 12 // 每年12月
+ MonthsPerQuarter = 3 // 每季度3月
+ WeeksPerNormalYear = 52 // 每常规年52周
+ weeksPerLongYear = 53 // 每长年53周
+ WeeksPerMonth = 4 // 每月4周
+ DaysPerLeapYear = 366 // 每闰年366天
+ DaysPerNormalYear = 365 // 每常规年365天
+ DaysPerWeek = 7 // 每周7天
+ HoursPerWeek = 168 // 每周168小时
+ HoursPerDay = 24 // 每天24小时
+ MinutesPerDay = 1440 // 每天1440分钟
+ MinutesPerHour = 60 // 每小时60分钟
+ SecondsPerWeek = 604800 // 每周604800秒
+ SecondsPerDay = 86400 // 每天86400秒
+ SecondsPerHour = 3600 // 每小时3600秒
+ SecondsPerMinute = 60 // 每分钟60秒
+ MillisecondsPerSecond = 1000 // 每秒1000毫秒
+ MicrosecondsPerMillisecond = 1000 // 每毫秒1000微秒
+ MicrosecondsPerSecond = 1000000 // 每秒1000000微秒
+)
+
+// StartOfCentury 本世纪开始时间
+func (p Pro) StartOfCentury() Pro {
+ p.Time = time.Date(p.Time.Year()/YearsPerCentury*YearsPerCentury, 1, 1, 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfCentury 本世纪结束时间
+func (p Pro) EndOfCentury() Pro {
+ p.Time = time.Date(p.Time.Year()/YearsPerCentury*YearsPerCentury+99, 12, 31, 23, 59, 59, 999999999, p.Time.Location())
+ return p
+}
+
+// StartOfDecade 本年代开始时间
+func (p Pro) StartOfDecade() Pro {
+ p.Time = time.Date(p.Time.Year()/YearsPerDecade*YearsPerDecade, 1, 1, 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfDecade 本年代结束时间
+func (p Pro) EndOfDecade() Pro {
+ p.Time = time.Date(p.Time.Year()/YearsPerDecade*YearsPerDecade+9, 12, 31, 23, 59, 59, 999999999, p.Time.Location())
+ return p
+}
+
+// StartOfYear 本年开始时间
+func (p Pro) StartOfYear() Pro {
+ p.Time = time.Date(p.Time.Year(), 1, 1, 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfYear 本年结束时间
+func (p Pro) EndOfYear() Pro {
+ p.Time = time.Date(p.Time.Year(), 12, 31, 23, 59, 59, 999999999, p.Time.Location())
+ return p
+}
+
+// Quarter 获取当前季度
+func (p Pro) Quarter() (quarter int) {
+ switch {
+ case p.Time.Month() >= 10:
+ quarter = 4
+ case p.Time.Month() >= 7:
+ quarter = 3
+ case p.Time.Month() >= 4:
+ quarter = 2
+ case p.Time.Month() >= 1:
+ quarter = 1
+ }
+ return
+}
+
+// StartOfQuarter 本季度开始时间
+func (p Pro) StartOfQuarter() Pro {
+ p.Time = time.Date(p.Time.Year(), time.Month(3*p.Quarter()-2), 1, 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfQuarter 本季度结束时间
+func (p Pro) EndOfQuarter() Pro {
+ quarter, day := p.Quarter(), 30
+ switch quarter {
+ case 1, 4:
+ day = 31
+ case 2, 3:
+ day = 30
+ }
+ p.Time = time.Date(p.Time.Year(), time.Month(3*quarter), day, 23, 59, 59, 999999999, p.Time.Location())
+ return p
+}
+
+// StartOfMonth 本月开始时间
+func (p Pro) StartOfMonth() Pro {
+ p.Time = time.Date(p.Time.Year(), time.Month(p.Month()), 1, 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfMonth 本月结束时间
+func (p Pro) EndOfMonth() Pro {
+ p.Time = time.Date(p.Time.Year(), time.Month(p.Month()), 1, 23, 59, 59, 999999999, p.Time.Location())
+ return p
+}
+
+// StartOfDay 本日开始时间
+func (p Pro) StartOfDay() Pro {
+ p.Time = time.Date(p.Time.Year(), p.Time.Month(), p.Time.Day(), 0, 0, 0, 0, p.Time.Location())
+ return p
+}
+
+// EndOfDay 本日结束时间
+func (p Pro) EndOfDay() Pro {
+ p.Time = time.Date(p.Time.Year(), p.Time.Month(), p.Time.Day(), 23, 59, 59, 0, p.Time.Location())
+ return p
+}
diff --git a/vendor/go.dtapp.net/gotime/today.go b/vendor/go.dtapp.net/gotime/today.go
new file mode 100644
index 0000000..f19f505
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/today.go
@@ -0,0 +1,112 @@
+package gotime
+
+import (
+ "log"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// Current 获取当前的时间
+func Current() Pro {
+ p := NewPro()
+ p.loc, p.Error = time.LoadLocation("Asia/Shanghai")
+ if p.Error != nil {
+ // Docker部署golang应用时时区问题 https://www.ddhigh.com/2018/03/01/golang-docker-timezone.html
+ log.Printf("【gotime】时区错误:%v\n", p.Error)
+ p.Time = time.Now().Add(time.Hour * 8)
+ } else {
+ p.Time = time.Now().In(p.loc)
+ }
+ return p
+}
+
+// SetCurrent 设置当前的时间
+func SetCurrent(sTime time.Time) Pro {
+ p := NewPro()
+ p.Time = sTime
+ return p
+}
+
+// SetCurrentParse 设置当前的时间
+func SetCurrentParse(str string) Pro {
+
+ p := NewPro()
+
+ p.loc, p.Error = time.LoadLocation("Asia/Shanghai")
+
+ layout := DateTimeFormat
+ if str == "" || str == "0" || str == "0000-00-00 00:00:00" || str == "0000-00-00" || str == "00:00:00" {
+ return p
+ }
+ if len(str) == 10 && strings.Count(str, "-") == 2 {
+ layout = DateFormat
+ }
+ if strings.Index(str, "T") == 10 {
+ layout = RFC3339Format
+ }
+ if _, err := strconv.ParseInt(str, 10, 64); err == nil {
+ switch len(str) {
+ case 8:
+ layout = ShortDateFormat
+ case 14:
+ layout = ShortDateTimeFormat
+ }
+ }
+ location, _ := time.ParseInLocation(layout, str, p.loc)
+
+ p.Time = location
+ return p
+}
+
+// SetCurrentUnix 设置当前的时间 Unix时间戳
+func SetCurrentUnix(ts int64) Pro {
+ p := NewPro()
+ p.Time = time.Unix(ts, 0)
+ return p
+}
+
+// Now 今天此刻
+func (p Pro) Now() time.Time {
+ return p.Time
+}
+
+// Format 今天此刻格式化
+func (p Pro) Format() string {
+ return p.Time.Format(DateTimeFormat)
+}
+
+// ToDateFormat 今天此刻日期
+func (p Pro) ToDateFormat() string {
+ return p.Time.Format(DateFormat)
+}
+
+// ToTimeFormat 今天此刻时间
+func (p Pro) ToTimeFormat() string {
+ return p.Time.Format(TimeFormat)
+}
+
+// Timestamp 今天此刻时间戳
+func (p Pro) Timestamp() int64 {
+ return p.Time.Unix()
+}
+
+// TimestampWithSecond 今天此刻时间戳
+func (p Pro) TimestampWithSecond() int64 {
+ return p.Time.Unix()
+}
+
+// TimestampWithMillisecond 今天毫秒级时间戳
+func (p Pro) TimestampWithMillisecond() int64 {
+ return p.Time.UnixNano() / int64(time.Millisecond)
+}
+
+// TimestampWithMicrosecond 今天微秒级时间戳
+func (p Pro) TimestampWithMicrosecond() int64 {
+ return p.Time.UnixNano() / int64(time.Microsecond)
+}
+
+// TimestampWithNanosecond 今天纳秒级时间戳
+func (p Pro) TimestampWithNanosecond() int64 {
+ return p.Time.UnixNano()
+}
diff --git a/vendor/go.dtapp.net/gotime/tomorrow.go b/vendor/go.dtapp.net/gotime/tomorrow.go
new file mode 100644
index 0000000..e91268f
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/tomorrow.go
@@ -0,0 +1,15 @@
+package gotime
+
+import "time"
+
+// Tomorrow 明天
+func Tomorrow() Pro {
+ p := NewPro()
+ location, err := time.LoadLocation("Asia/Shanghai")
+ if err != nil {
+ p.Time = time.Now().Add(time.Hour*8).AddDate(0, 0, +1)
+ } else {
+ p.Time = time.Now().In(location).AddDate(0, 0, +1)
+ }
+ return p
+}
diff --git a/vendor/go.dtapp.net/gotime/version.go b/vendor/go.dtapp.net/gotime/version.go
new file mode 100644
index 0000000..15654f7
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/version.go
@@ -0,0 +1,3 @@
+package gotime
+
+const Version = "1.0.4"
diff --git a/vendor/go.dtapp.net/gotime/yesterday.go b/vendor/go.dtapp.net/gotime/yesterday.go
new file mode 100644
index 0000000..be1cd6c
--- /dev/null
+++ b/vendor/go.dtapp.net/gotime/yesterday.go
@@ -0,0 +1,17 @@
+package gotime
+
+import (
+ "time"
+)
+
+// Yesterday 昨天
+func Yesterday() Pro {
+ p := NewPro()
+ location, err := time.LoadLocation("Asia/Shanghai")
+ if err != nil {
+ p.Time = time.Now().Add(time.Hour*8).AddDate(0, 0, -1)
+ } else {
+ p.Time = time.Now().In(location).AddDate(0, 0, -1)
+ }
+ return p
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
new file mode 100644
index 0000000..bdb13a7
--- /dev/null
+++ b/vendor/modules.txt
@@ -0,0 +1,6 @@
+# go.dtapp.net/gorandom v1.0.1
+## explicit; go 1.18
+go.dtapp.net/gorandom
+# go.dtapp.net/gotime v1.0.4
+## explicit; go 1.18
+go.dtapp.net/gotime