72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package timeutils
|
|
|
|
import "time"
|
|
|
|
const (
|
|
Second int64 = 1
|
|
Minute = 60 * Second
|
|
Hour = 60 * Minute
|
|
Day = 24 * Hour
|
|
Week = 7 * Day
|
|
)
|
|
|
|
var (
|
|
// Europe/Moscow (UTC+03:00) time zone
|
|
MoscowLocation = time.FixedZone("Europe/Moscow", int(Hour)*3)
|
|
// Europe/Moscow (UTC+03:00) time zone
|
|
DefaultLocation = MoscowLocation
|
|
|
|
// 2000-12-31
|
|
DefaultDateLayout = "2006-01-02"
|
|
// 23:59:59
|
|
DefaultTimeLayout = "15:04:05"
|
|
// 23:59
|
|
DefaultTimeShortLayout = "15:04"
|
|
// Example: 2000-12-31 13:01:59
|
|
DefaultDatetimeLayout = "2006-01-02 15:04:05"
|
|
// Example: 2000-12-31__13-01-59
|
|
DefaultFilenameLayout = "2006-01-02__15-04-05"
|
|
)
|
|
|
|
func Now() time.Time {
|
|
return time.Now().In(DefaultLocation)
|
|
}
|
|
|
|
func StartOfDay(now time.Time) time.Time {
|
|
return time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
|
|
}
|
|
|
|
func StartOfPreviousDay(now time.Time) time.Time {
|
|
return StartOfDay(now).AddDate(0, 0, -1)
|
|
}
|
|
|
|
func StartOfNextDay(now time.Time) time.Time {
|
|
return StartOfDay(now).AddDate(0, 0, 1)
|
|
}
|
|
|
|
func StartOfWeek(now time.Time) time.Time {
|
|
offset := -convertWeekday(now.Weekday())
|
|
return StartOfDay(now).AddDate(0, 0, offset)
|
|
}
|
|
|
|
func StartOfPreviousWeek(now time.Time) time.Time {
|
|
offset := -7 - convertWeekday(now.Weekday())
|
|
return StartOfDay(now).AddDate(0, 0, offset)
|
|
}
|
|
|
|
func StartOfNextWeek(now time.Time) time.Time {
|
|
offset := 7 - convertWeekday(now.Weekday())
|
|
return StartOfDay(now).AddDate(0, 0, offset)
|
|
}
|
|
|
|
// Monday - 0
|
|
// Tuesday - 1
|
|
// Wednesday - 2
|
|
// Thursday - 3
|
|
// Friday - 4
|
|
// Saturday - 5
|
|
// Sunday - 6
|
|
func convertWeekday(weekday time.Weekday) int {
|
|
return (int(weekday) + 6) % 7
|
|
}
|